powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
25 сообщений из 28, страница 1 из 2
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
    #39299920
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос простой и он был задан в заголовке. Далее что меня сподвигло его задать:

Возьмём тот же гридпанель - создал четыре строки и три столбца. В них начал помещать компоненты.

Наклепал интефрейс, всё тщательно расписал в xaml, у каждого компонента указал Grid.Row, Grid.Column, Grid.ColumnSpan, Grid.RowSpan
Потом бац! И понадобилось ввести ещё одну строку RowDefinition с индексом 0 в этой гридпанели. Во всех компонентах каждый раз переписывать Grid.Row? А столбец с индексом 1 - это мне переписывать свойства Column и ColumnSpan во всех компонентах?

Я напомню, что речь идёт о большой программе . Как правильно проектировать её интерфейс, чтоб не запутаться?

А как решать проблему с невидимыми панелями? - ну, теми, которые пока что visible == hidden, которые должны отобразиться по ходу работы пользователя с программой в нужный момент? Насколько правильно я делаю, протыкивая многим "лишним" (мешающим) существующим компонентам visible = hidden (временно), чтобы правильно разместить новую панельку. А потом, когда я удовлетворён её размещением, её скрываю, и пробегаюсь по другим, делаю visible = true обратно на всех тех, что должны быть видны с самого начала.
Короче, беготня по компонентам с целью изменить их свойство visible сначала в false, потом обратно в true при каждом новом добавлении (или изменении существующих) компонент мне немного поднадоела.

P.S.p.s.
под "панелями" я имею в виду любые компоненты. Просто называю их так потому что всякого рода textbox и т.п. я помещаю не непосредственно на MainForm, а создаю свои компоненты и пихаю их туда, чтобы логика этих компонент была внутри них. И каждый мой компонент представляет собой такую "панель" - либо с кнопками, либо там ещё с чем-нибудь... А есть некоторые "панели", которые предоставляют кнопочки для скрытия или открытия других панелей. Как-то так.
...
Рейтинг: 0 / 0
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
    #39299921
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В тексте выше под словом "visible" имеется в виду Visibility, а под словом hidden - collapsed.
С непривычки перепутал.


Вот, в userform я такой проблемы не испытывал, т.к. там все невидимые компоненты во время разработки отображаются на экране, а не скрываются.
...
Рейтинг: 0 / 0
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
    #39299922
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да блин
userform - в смысле, winforms.
Надо проспаться
...
Рейтинг: 0 / 0
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
    #39299939
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть еще UniformGrid, в нём не нужно использовать Grid.Row
Ну и если сильно припёрло, напишите свою панель так, как вы её видите, в этом проблемы нет.

написал уже не 1 проект, обычно работаю так:
мне приносят макеты интефейса
по макетам я делаю 1 наброски, на этом этапе как раз и задаются все гриды
весь интерфейс я пишу в DataTemplate'ах, а не UserControl'а
потом уже дорабатываю "помакетно"
Не понял, зачем вы задаете Visbility при добавлении нового объекта.
Если интерфейс предполагает наличии нескольких объектов 1 типа на панели, можно использовать ItemsControl, а в нём реализовать всю логику с Visibility.
К сожалению, когда нужна сложная логика работы приходится писать контролы ручками
...
Рейтинг: 0 / 0
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
    #39299953
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandНаклепал интефрейс, всё тщательно расписал в xaml, у каждого компонента указал Grid.Row, Grid.Column, Grid.ColumnSpan, Grid.RowSpan
Потом бац! И понадобилось ввести ещё одну строку RowDefinition с индексом 0 в этой гридпанели. Во всех компонентах каждый раз переписывать Grid.Row? А столбец с индексом 1 - это мне переписывать свойства Column и ColumnSpan во всех компонентах?+1

Больной на голову автор WPF-ной панели Grid видимо не был знаком с HTML. У нас для решения этой проблемы был написан следующий костыль:
Костыль для Grid
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
    public class AutoGrid : Grid
    {
        #region Execute Mapping Events

        protected override void OnInitialized(EventArgs e)
        {
            base.OnInitialized(e);
            RecomputeGridMapping();
        }

        protected override void OnVisualChildrenChanged(DependencyObject visualAdded, DependencyObject visualRemoved)
        {
            base.OnVisualChildrenChanged(visualAdded, visualRemoved);

            if (IsInitialized)
                RecomputeGridMappingOnce();
        }

        void Columns_Changed(DependencyPropertyChangedEventArgs e)
        {
            if (IsInitialized)
                RecomputeGridMappingOnce();
        }

        #endregion

        #region Mapping Core

        DispatcherOnceInvoker RecomputeGridMappingOnceInvoker = new DispatcherOnceInvoker();

        void RecomputeGridMappingOnce()
        {
            RecomputeGridMappingOnceInvoker.BeginInvokeOnce(RecomputeGridMapping);
        }

        void RecomputeGridMapping()
        {
            CreateRows();
            CreateColumns();
            MapChildren();
        }

        void CreateRows()
        {
            var rows = Children.Count / Columns;

            if (Children.Count % Columns > 0)
                rows++;

            while (RowDefinitions.Count > rows && RemoveLastAutoGeneratedItem(RowDefinitions))
            { }

            while (RowDefinitions.Count < rows)
            {
                var row = new RowDefinition { Height = GridLength.Auto };
                SetIsAutoGenerated(row, true);
                RowDefinitions.Add(row);
            }
        }

        void CreateColumns()
        {
            while (ColumnDefinitions.Count > Columns && RemoveLastAutoGeneratedItem(ColumnDefinitions))
            { }

            while (ColumnDefinitions.Count < Columns)
            {
                var column = new ColumnDefinition { Width = GridLength.Auto };
                SetIsAutoGenerated(column, true);
                ColumnDefinitions.Add(column);
            }

            if (ColumnDefinitions.Count > 0)
            {
                var lastColumn = ColumnDefinitions[ColumnDefinitions.Count - 1];
                if (GetIsAutoGenerated(lastColumn))
                    lastColumn.ClearValue(ColumnDefinition.WidthProperty);
            }
        }

        bool RemoveLastAutoGeneratedItem<T>(IList<T> list)
            where T : DependencyObject
        {
            var index = list.LastIndex(v => GetIsAutoGenerated(v));
            if (index >= 0)
            {
                list.RemoveAt(index);
                return true;
            }
            return false;
        }

        void MapChildren()
        {
            int i = 0;
            foreach (UIElement child in Children)
            {
                SetColumn(child, i % Columns);
                SetRow(child, i / Columns);
                i++;
            }
        }

        #endregion

        #region Columns Property

        public static readonly DependencyProperty ColumnsProperty =
            DependencyProperty.Register(
                "Columns",
                typeof(int),
                typeof(AutoGrid),
                new FrameworkPropertyMetadata(2, (s, e) => ((AutoGrid)s).Columns_Changed(e))
            );

        public int Columns
        {
            get { return (int)GetValue(ColumnsProperty); }
            set { SetValue(ColumnsProperty, value); }
        }

        #endregion

        #region IsAutoGenerated Property

        static readonly DependencyProperty IsAutoGeneratedProperty =
            DependencyProperty.RegisterAttached(
                "IsAutoGenerated",
                typeof(bool),
                typeof(AutoGrid)
            );

        static bool GetIsAutoGenerated(DependencyObject target)
        {
            return (bool)target.GetValue(IsAutoGeneratedProperty);
        }

        static void SetIsAutoGenerated(DependencyObject target, bool value)
        {
            target.SetValue(IsAutoGeneratedProperty, value);
        }

        #endregion
    }

    public class DispatcherOnceInvoker : DispatcherObject
    {
        Action Action;

        public void BeginInvokeOnce(Action action)
        {
            VerifyAccess();

            if (Action != null)
                return;

            Action = action;

            Dispatcher.BeginInvoke(() =>
            {
                var actionToExecute = GetActionAndReset();
                actionToExecute();
            });
        }

        Action GetActionAndReset()
        {
            var result = Action;
            Action = null;
            return result;
        }
    }

Там идея в авторасстановке свойств Grid.Row и Grid.Col в зависимости от количества колонок в свойстве Columns.
...
Рейтинг: 0 / 0
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
    #39299954
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesНу и если сильно припёрло, напишите свою панель так, как вы её видите, в этом проблемы нет.Ну и сколько человекочасов ожидается потратить на написание аналога <table> + <tr> + <td> под WPF? Заняться-то больше нечем.
...
Рейтинг: 0 / 0
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
    #39299962
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КБольной на голову автор WPF-ной панели Grid видимо не был знаком с HTML
Знаком. Есть там table - и заполняются там ячейки в момент их создания. А тут сначала кучу создал, потом по номерам обратился. И чем по-твоему это мне должно помочь? В том-то и дело, что если б работало как в html, я был бы счастлив!


Если б сделали хотя бы доступ не по номерам, а по названиям колонок.
Типа,
Grid.Column ="colName" Grid.ColumnSpanTo="colSurname"
Было бы зашибись.
Сделал бы так, если б умел. Я пока только осваиваюсь в wpf, в связи с чем вопросы и задаю.
...
Рейтинг: 0 / 0
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
    #39299965
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А программулину, что ты скинул, вечером потестирую, как домой приеду...
...
Рейтинг: 0 / 0
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
    #39299968
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandАлексей КБольной на голову автор WPF-ной панели Grid видимо не был знаком с HTML
Знаком. Есть там table - и заполняются там ячейки в момент их создания.Ты один из авторов WPF? Это послание было обращено автору WPF Grid.
Charles WeylandА тут сначала кучу создал, потом по номерам обратился. И чем по-твоему это мне должно помочь? В том-то и дело, что если б работало как в html, я был бы счастлив!Ниже реальный пример использования, Grid.Row и Grid.Col рассчитываются автоматически.
Реальный пример формы редактирования.
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
<UserControl x:Class="Personal.FrmPersonalEdit"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:s="clr-namespace:SspMain;assembly=SspMainWpf"
             xmlns:my="clr-namespace:Personal"
             mc:Ignorable="d" 
             Width="400">
    <s:AutoGrid DataContext="{Binding Data}">
        <TextBlock Margin="3" VerticalAlignment="Center" Text="Фамилия:"/>
        <TextBox Margin="3" HorizontalAlignment="Left" MinWidth="200">
            <TextBox.Text>
                <Binding Path="LastName" Converter="{my:CnvPersNamePart}">
                    <Binding.ValidationRules>
                        <s:NotNullRule/>
                        <my:PersNamePartRule/>
                    </Binding.ValidationRules>
                </Binding>
            </TextBox.Text>
        </TextBox>

        <TextBlock Margin="3" VerticalAlignment="Center" Text="Имя:"/>
        <TextBox Margin="3" HorizontalAlignment="Left" MinWidth="200">
            <TextBox.Text>
                <Binding Path="FirstName" Converter="{my:CnvPersNamePart}">
                    <Binding.ValidationRules>
                        <s:NotNullRule/>
                        <my:PersNamePartRule/>
                    </Binding.ValidationRules>
                </Binding>
            </TextBox.Text>
        </TextBox>

        <TextBlock Margin="3" VerticalAlignment="Center" Text="Отчество:"/>
        <TextBox Margin="3" HorizontalAlignment="Left" MinWidth="200">
            <Binding Path="PatrName" Converter="{my:CnvPersNamePart}">
                <Binding.ValidationRules>
                    <s:NotNullRule/>
                    <my:PersNamePartRule/>
                </Binding.ValidationRules>
            </Binding>
        </TextBox>

        <TextBlock Margin="3" VerticalAlignment="Center" Text="Табельный номер:"/>
        <TextBox Margin="3,3,0,3" MinWidth="80" HorizontalAlignment="Left">
            <TextBox.Text>
                <Binding Path="TabNum" Converter="{s:CnvInt}">
                    <Binding.ValidationRules>
                        <s:NotNullRule/>
                        <s:IntBetweenRule MinValue="1"/>
                    </Binding.ValidationRules>
                </Binding>
            </TextBox.Text>
        </TextBox>

        <TextBlock Text="Дата поступления:" VerticalAlignment="Center" Margin="3"/>
        <s:DateTimePicker Value="{Binding EntranceDate}" FormatMode="Date" Margin="3"/>

        <TextBlock Text="Дата увольнения:" VerticalAlignment="Center" Margin="3"/>
        <s:DateTimePicker Value="{Binding RetireDate}" FormatMode="Date" Margin="3"/>

        <TextBlock Text="Примечания:" VerticalAlignment="Top" Margin="3"/>
        <TextBox Margin="3" 
                 Text="{Binding Notes}" 
                 Style="{StaticResource NotesTextBoxStyle}"/>
    </s:AutoGrid>
</UserControl>

...
Рейтинг: 0 / 0
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
    #39299999
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К ,

а, я в электричке читал, не увидел слова "автор".

За пример большое спасибо!! Попробую обязательно
...
Рейтинг: 0 / 0
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
    #39300004
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ok :-)
...
Рейтинг: 0 / 0
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
    #39300007
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а можно глянуть скриншот, чтобы знать, что ожидать?
...
Рейтинг: 0 / 0
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
    #39300009
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.
...
Рейтинг: 0 / 0
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
    #39300021
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandПотом бац! И понадобилось ввести ещё одну строку RowDefinition с индексом 0 в этой гридпанели.Часто использование DockPanel оправданнее и удобнее грида. Присмотрись к ней.
...
Рейтинг: 0 / 0
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
    #39300036
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, где возможно, заменяю именно док-панелью.
Кстати, у неё какой-то "глюк" есть.
Создаю на ней две кнопки фиксированной ширины. Одну док=влево, другую док=вправо.
Вторая располагается по середине. И ничего с ней не сделать.
Пока дополнительно не создашь какой-нибудь <GridPanel />.
Т.е. пока нет элемента, который заполнит собой всю оставшуюся область, размещённые на док-панели компоненты будут располагаться не там, где им полагается быть. Для меня это странно.
...
Рейтинг: 0 / 0
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
    #39300055
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UniForm грид еще удобен для размещения кнопок, если Grid не растянут, а выравнен по краю, то его размер будет равен максимальному размеру 1 из содержимого * на количество клеток\строк. То есть все кнопки (например) будут 1 размера

авторБольной на голову автор WPF-ной панели Grid видимо не был знаком с HTML. У нас для решения этой проблемы был написан следующий костыльтут просто несколько разные подходы. для того, о чём вы пишите есть FlowDocument, где можно создать и таблицу в том числе, а в таблице разместить нужные элементы управления.
...
Рейтинг: 0 / 0
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
    #39300059
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandВторая располагается по середине.самой кнопке задай выравнивание вправо
...
Рейтинг: 0 / 0
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
    #39300072
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а, действительно. Хм.
Хотя это тоже странно. Не понятно, чем объясняется свободное пространство правее кнопки.
...
Рейтинг: 0 / 0
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
    #39300074
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...хотя понял...
две кнопки делят между собой панель пополам. И по умолчанию выравнивание идёт по левому краю. А раз я задал фиксированную ширину, то справа появилось свободное место.

Спасибо)
...
Рейтинг: 0 / 0
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
    #39300091
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesавторБольной на голову автор WPF-ной панели Grid видимо не был знаком с HTML. У нас для решения этой проблемы был написан следующий костыльтут просто несколько разные подходы. для того, о чём вы пишите есть FlowDocument, где можно создать и таблицу в том числе, а в таблице разместить нужные элементы управления.FlowDocument вроде как используется в основном для создания отчётности? Побочных эффектов в нём нет от встраивания в него "обычных" контролов? На первый взгляд вроде работает, но есть масса сомнений.
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:my="clr-namespace:WpfApplication1"
        Title="MainWindow" Height="350" Width="525">
    <Window.DataContext>
        <my:Class1/>
    </Window.DataContext>
    <FlowDocumentScrollViewer>
        <FlowDocument>
            <Table>
                <TableRowGroup>
                    <TableRow>
                        <TableCell>
                            <Paragraph>Value1:</Paragraph>
                        </TableCell>
                        <TableCell>
                            <Paragraph>
                                <TextBox Width="200" Text="{Binding Value1}"/>
                            </Paragraph>
                        </TableCell>
                    </TableRow>
                    <TableRow>
                        <TableCell>
                            <Paragraph>Value2:</Paragraph>
                        </TableCell>
                        <TableCell>
                            <Paragraph>
                                <TextBox Width="200" Text="{Binding Value2}"/>
                            </Paragraph>
                        </TableCell>
                    </TableRow>
                </TableRowGroup>
            </Table>
        </FlowDocument>
    </FlowDocumentScrollViewer>
</Window>

Понятно, что подход с Grid панель другой. Непонятно зачем он был предложен, когда есть более удобные альтернативы.
...
Рейтинг: 0 / 0
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
    #39300113
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КПонятно, что подход с Grid панель другой. Непонятно зачем он был предложен, когда есть более удобные альтернативы.
Может, ради RowSpan и ColumnSpan? Я использую GridPanel по двум причинам:
1. равномерное растяжение всего содержимого
2. возможность вольного добавления элементов управления -
одного в ячейке 1x1 (строка x столбец),

другого чуть ниже, в ячейке 2x1,

третьего в объединённой ячейке 1x1 ... 2x1,

А четвёртого в объединённой ячейке вообще справа - 1x1 ... 1x3
Это, в частности, нужно для оформительских элементов управления (линий там.. ), фоновых логотипах. Но не только.
...
Рейтинг: 0 / 0
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
    #39300181
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати есть еще один изощренный способ про который не упоминают, обычно:

это Grid.IsSharedSizeScope="True", DefinitionBase.SharedSizeGroup="GroupName"
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
        <StackPanel Grid.IsSharedSizeScope="True">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" SharedSizeGroup="LabelText"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <TextBlock Grid.Column="0" Text="Name"/>
                <TextBox Grid.Column="1" />
            </Grid>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" SharedSizeGroup="LabelText"/>
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <TextBlock Grid.Column="0" Text="Age" />
                <TextBox Grid.Column="1" />
            </Grid>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" SharedSizeGroup="LabelText"/>
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <TextBlock Grid.Column="0" Text="Telephone"/>
                <TextBox Grid.Column="1"/>
            </Grid>
        </StackPanel>
...
Рейтинг: 0 / 0
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
    #39300231
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А это вообще нормально, что XAML файл разрастается до нескольких тысяч строк? И, по ходу, с такими темпами за десятку уйдёт
...
Рейтинг: 0 / 0
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
    #39300234
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я как-то привык к маленьким файлам. Если разрастается, то разделяю по разным файлам или даже проектам. И один файлик от 10 до 500 строк кода C# обычно.
...
Рейтинг: 0 / 0
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
    #39300236
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем ты его разращиваешь? Что мешает инкапсулировать даже неповторяющийся код?
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]