Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Эквивалент Panel / 15 сообщений из 15, страница 1 из 1
10.07.2020, 14:45
    #39978163
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эквивалент Panel
Здравствуйте!

Из такого скриншота нужно нарисовать форму на WPF.
...
Рейтинг: 0 / 0
10.07.2020, 14:48
    #39978166
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эквивалент Panel
Согласно такому сопоставлению Panel для WindowsForm эквивалентен Canvas для WPF.

Написал такой код:
Код: html
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.
     <Grid>       
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />           
        </Grid.ColumnDefinitions>

        <DataGrid Grid.Column="0" >
            <DataGrid.Columns>
                <DataGridTextColumn Header="Number" Binding="{Binding Path=Title}" Width="60" />
                <DataGridTextColumn Header="X" Binding="{Binding Path=X}" Width="50" />
                <DataGridTextColumn Header="Y" Binding="{Binding Path=Y}" Width="50" />
            </DataGrid.Columns>
        </DataGrid>

        <Grid Grid.Column="1">
            <Grid.RowDefinitions>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
            </Grid.RowDefinitions>

            <Canvas HorizontalAlignment="Stretch" Grid.Row="0">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="50"></RowDefinition>
                        <RowDefinition Height="50*"></RowDefinition>
                    </Grid.RowDefinitions>

                    <StackPanel VerticalAlignment="Center" Orientation="Horizontal" HorizontalAlignment="Stretch" Grid.Row="0">
                        <TextBlock Text="X:"  Margin="5,5,5,5"  />
                        <TextBox Name="TexBoxXTest" Width="40" Margin="5" />
                        <TextBlock Text="Y:" Margin="10,5,5,5"  />
                        <TextBox Name="TexBoxYTest" Width="40" Margin="5" />
                    </StackPanel>

                    <Button Content="Кнопка1" Margin="5" HorizontalAlignment="Stretch" Grid.Row="1"/>
                </Grid>
            </Canvas>
            
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" Grid.Row="1">
                <Button Content="Кнопка2" HorizontalAlignment="Stretch" Margin="5"/>
                <Button Content="Кнопка3" HorizontalAlignment="Stretch" Margin="5"/>
            </StackPanel>

            <Button Content="Кнопка4" HorizontalAlignment="Stretch" Margin="5" Grid.Row="2"/>
        </Grid>
    </Grid>

В результате получаем:

1. Canvas не растягивается по оставшейся ширине, следовательно, Кнопка1 тоже не растягивается.

2. Похоже у Canvas нету BorderStyle как у Panel .

3. Кнопка2 и Кнопка3 накладываются на Кнопка1 . Мне кажется это из за Canvas .

4. Кнопка2 и Кнопка3 не растягиваются по ширине.
...
Рейтинг: 0 / 0
10.07.2020, 14:49
    #39978167
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эквивалент Panel
Скажите, как правильно написать?
...
Рейтинг: 0 / 0
10.07.2020, 15:52
    #39978207
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эквивалент Panel
ferzmikk
Согласно такому сопоставлению Panel для WindowsForm эквивалентен Canvas для WPF.
забудь и никогда больше не открывай
не надо тащить за собой подход WF в WPF

В данном случае, в общем-то, всё делается на Grid-ах.
Тебе нужно опеределиться, что и как должно масштабироваться при растягивании формы и от этого плясать.
Вряд ли ты захочешь конпку4 на весь экран
...
Рейтинг: 0 / 0
10.07.2020, 20:16
    #39978275
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эквивалент Panel
Shocker.Pro
ferzmikk
Согласно такому сопоставлению Panel для WindowsForm эквивалентен Canvas для WPF.
забудь и никогда больше не открывай
не надо тащить за собой подход WF в WPF

В данном случае, в общем-то, всё делается на Grid-ах.
Тебе нужно опеределиться, что и как должно масштабироваться при растягивании формы и от этого плясать.
Вряд ли ты захочешь конпку4 на весь экран
обычно такие окна одного размера.
Canvas панель нужна в крайне редких случаях, без ума эту панель лучше не брать вообще. А в будущем сами сможете создавать панели.
ограничитесь пока Grid, UniformGrid, StackPanel, DockPanel и WrapPanel.
Разметка в WPF чем то похожа на Web, очень и очень условно, по этому ориентируйтесь на декларативных подход, макетирование (панели) и связывание. ну и без MVVM можно даже не пытаться, будет боль и вам тут не помогут, я уж точно :)
...
Рейтинг: 0 / 0
10.07.2020, 20:33
    #39978277
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эквивалент Panel
Roman Mejtes
обычно такие окна одного размера.
фиксированного ты имеешь ввиду? я категорически против. Тут, к примеру, есть грид. Вопрос в том, что можно растягивать только грид, а может ТС захочет, чтобы текстовые поля растягивались пропорционально, скажем 30% от ширины формы. Вертикально грид явно должен растягиваться. Кнопки - вряд ли, но тоже могут, к примеру до некоего MaxHeight
...
Рейтинг: 0 / 0
11.07.2020, 17:02
    #39978455
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эквивалент Panel
Shocker.Pro
В данном случае, в общем-то, всё делается на Grid-ах.
Тебе нужно опеределиться, что и как должно масштабироваться при растягивании формы и от этого плясать.
Пишу так
Код: html
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.
<Grid>       
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="160"/>
            <ColumnDefinition Width="*"/>           
        </Grid.ColumnDefinitions>

        <DataGrid Grid.Column="0" >
            <DataGrid.Columns>
                <DataGridTextColumn Header="Number" Binding="{Binding Path=Title}" Width="60" />
                <DataGridTextColumn Header="X" Binding="{Binding Path=X}" Width="50" />
                <DataGridTextColumn Header="Y" Binding="{Binding Path=Y}" Width="50" />
            </DataGrid.Columns>
        </DataGrid>

        <Grid Grid.Column="1">
            <Grid.RowDefinitions>
                <RowDefinition Height="70"></RowDefinition>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
            </Grid.RowDefinitions>

            <Grid Grid.Row="0">
                <Grid.RowDefinitions>
                    <RowDefinition Height="30"></RowDefinition>
                    <RowDefinition Height="*"></RowDefinition>
                </Grid.RowDefinitions>

                <Grid Grid.Row="0">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="30"></RowDefinition>
                        <RowDefinition Height="50"></RowDefinition>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="20"/>
                        <ColumnDefinition Width="30"/>
                        <ColumnDefinition Width="20"/>
                        <ColumnDefinition Width="30"/>
                    </Grid.ColumnDefinitions>

                    <TextBlock Text="X:"  Margin="5,5,5,5"  Grid.Row="0" Grid.Column="0" VerticalAlignment="Center"/>
                    <TextBox Name="TexBoxXTest" Margin="0,5,0,5" Grid.Row="0" Grid.Column="1" VerticalAlignment="Center"/>
                    <TextBlock Text="Y:" Margin="5,5,5,5"  Grid.Row="0" Grid.Column="2" VerticalAlignment="Center"/>
                    <TextBox Name="TexBoxYTest"  Margin="0,5,0,5" Grid.Row="0" Grid.Column="3" VerticalAlignment="Center"/>
                </Grid>

                <Button Content="Кнопка1" Margin="5" HorizontalAlignment="Stretch" Grid.Row="1" Grid.ColumnSpan="4"/>
            </Grid>

            <Grid Grid.Row="1">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition />                   
                </Grid.ColumnDefinitions>

                <Button Content="Кнопка2" HorizontalAlignment="Stretch" Margin="5" Grid.Column="0"/>
                <Button Content="Кнопка3" HorizontalAlignment="Stretch" Margin="5" Grid.Column="1"/>
            </Grid>           
            
            <Button Content="Кнопка4" HorizontalAlignment="Stretch" Margin="5" Grid.Row="2"/>
        </Grid>
    </Grid>

Выдает такой результат:
...
Рейтинг: 0 / 0
11.07.2020, 17:04
    #39978456
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эквивалент Panel
Скажите, как правильно задать Border вокруг ввода X , Y и Кнопка1 как из первого скриншота?
...
Рейтинг: 0 / 0
12.07.2020, 16:31
    #39978667
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эквивалент Panel
ferzmikk
Скажите, как правильно задать Border вокруг ввода X , Y и Кнопка1 как из первого скриншота?
Код: xml
1.
      <Border BorderThickness="1" BorderBrush="Black" Padding="5">

но может быть ты прочтешь учебник (а не дурацкие сопоставления с винформс), чтобы узнать какие готовые контролы существуют в WPF, чтобы не задавать таких элементарных вопросов?
...
Рейтинг: 0 / 0
17.07.2020, 13:10
    #39980900
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эквивалент Panel
Сделал два варианта. Первый вариант с наложением, второй - без.
Код: html
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.
<Window x:Class="WpfApp2_test2__.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp2_test2__"
        mc:Ignorable="d"
         Title="BorderSample" Height="215" Width="400">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>           
        </Grid.ColumnDefinitions>

        <GroupBox Header="Вариант 1" Margin="5,5,5,5" Grid.Column="0">
            <Grid Grid.Row="1">
                <Grid.RowDefinitions>
                    <RowDefinition Height="70"></RowDefinition>
                    <RowDefinition Height="40"></RowDefinition>
                    <RowDefinition Height="*"></RowDefinition>
                </Grid.RowDefinitions>
                
                <Grid Grid.Row="0">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="35"></RowDefinition>
                        <RowDefinition Height="*"/>
                    </Grid.RowDefinitions>
                    
                <Border BorderThickness="1" BorderBrush="Black" Margin ="5" Grid.Row="0" Grid.RowSpan="2">
                </Border>

                <Grid  Grid.Row="0" Margin="5,5,5,5" Grid.RowSpan="2">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="30"></RowDefinition>
                        <RowDefinition Height="*"></RowDefinition>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="20"/>
                        <ColumnDefinition Width="30"/>
                        <ColumnDefinition Width="20"/>
                        <ColumnDefinition Width="30"/>
                    </Grid.ColumnDefinitions>

                    <TextBlock Text="X:"  Margin="5,5,5,5"  Grid.Row="0" Grid.Column="0" VerticalAlignment="Center"/>
                    <TextBox Name="TexBoxXTest" Margin="0,5,0,5" Grid.Row="0" Grid.Column="1" VerticalAlignment="Center"/>
                    <TextBlock Text="Y:" Margin="5,5,5,5"  Grid.Row="0" Grid.Column="2" VerticalAlignment="Center"/>
                    <TextBox Name="TexBoxYTest"  Margin="0,5,0,5" Grid.Row="0" Grid.Column="3" VerticalAlignment="Center"/>
                </Grid>
                    <Button Content="Кнопка1" Margin="10,0,10,10" HorizontalAlignment="Stretch" Grid.Row="1"/>
                </Grid>
                <Grid Grid.Row="1">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition />
                        <ColumnDefinition />
                    </Grid.ColumnDefinitions>

                    <Button Content="Кнопка2" HorizontalAlignment="Stretch" Margin="5" Grid.Column="0"/>
                    <Button Content="Кнопка3" HorizontalAlignment="Stretch" Margin="5" Grid.Column="1"/>
                </Grid>

                <Button Content="Кнопка4" HorizontalAlignment="Stretch" Margin="5" Grid.Row="2"/>
            </Grid>
        </GroupBox>

        <GroupBox Header="Вариант 2" Margin="5,5,5,5" Grid.Column="1">
            <Grid Grid.Row="1">
                <Grid.RowDefinitions>
                    <RowDefinition Height="70"></RowDefinition>
                    <RowDefinition Height="40"></RowDefinition>
                    <RowDefinition Height="*"></RowDefinition>
                </Grid.RowDefinitions>
                
                <Grid Grid.Row="0">                   
                    <Border BorderThickness="1" BorderBrush="Black" Margin ="5,5,5,5" Grid.Row="0">
                        
                        <Grid Margin="0"   >                           
                            <Grid.RowDefinitions>
                                <RowDefinition Height="30"></RowDefinition>
                                <RowDefinition Height="40*"></RowDefinition>
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="20"/>
                                <ColumnDefinition Width="30"/>
                                <ColumnDefinition Width="20"/>
                                <ColumnDefinition Width="30"/>
                            </Grid.ColumnDefinitions>

                            <TextBlock Text="X:"  Margin="5,5,5,5"  Grid.Row="0" Grid.Column="0" VerticalAlignment="Center"/>
                            <TextBox Name="TexBoxXTest2" Margin="0,5,0,5" Grid.Row="0" Grid.Column="1" VerticalAlignment="Center"/>
                            <TextBlock Text="Y:" Margin="5,5,5,5"  Grid.Row="0" Grid.Column="2" VerticalAlignment="Center"/>
                            <TextBox Name="TexBoxYTest2"  Margin="0,5,0,5" Grid.Row="0" Grid.Column="3" VerticalAlignment="Center"/>

                            <Button Content="Кнопка1" Margin="5,0,5,5" HorizontalAlignment="Stretch" Grid.Row="1" Grid.ColumnSpan="4"/>
                        </Grid>                        
                    </Border>
                </Grid>
                
                <Grid Grid.Row="1">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition />
                        <ColumnDefinition />
                    </Grid.ColumnDefinitions>

                    <Button Content="Кнопка2" HorizontalAlignment="Stretch" Margin="5" Grid.Column="0"/>
                    <Button Content="Кнопка3" HorizontalAlignment="Stretch" Margin="5" Grid.Column="1"/>
                </Grid>

                <Button Content="Кнопка4" HorizontalAlignment="Stretch" Margin="5" Grid.Row="2"/>
            </Grid>
        </GroupBox>
    </Grid>
</Window>

Во втором варианте Кнопка1 не растягивается.

Как правильно написать?
...
Рейтинг: 0 / 0
17.07.2020, 15:21
    #39980988
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эквивалент Panel
Код: xml
1.
2.
3.
4.
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="3*"/>
...
Рейтинг: 0 / 0
18.07.2020, 17:44
    #39981332
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эквивалент Panel
Roman Mejtes
Код: xml
1.
2.
3.
4.
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="3*"/>

Получается так. Но X и Y растягиваются по ширине.
...
Рейтинг: 0 / 0
18.07.2020, 17:49
    #39981335
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эквивалент Panel
Если так написать
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
<Border BorderThickness="1" BorderBrush="Black" Margin ="5,5,5,5" Grid.Row="0">

    <Grid Margin="0"   >
        <Grid.RowDefinitions>
            <RowDefinition Height="30"></RowDefinition>
            <RowDefinition Height="40*"></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="20"/>
            <ColumnDefinition Width="30"/>
            <ColumnDefinition Width="20"/>
            <ColumnDefinition Width="30"/>
            <ColumnDefinition />
        </Grid.ColumnDefinitions>

        <TextBlock Text="X:"  Margin="5,5,5,5"  Grid.Row="0" Grid.Column="0" VerticalAlignment="Center"/>
        <TextBox Name="TexBoxXTest2" Margin="0,5,0,5" Grid.Row="0" Grid.Column="1" VerticalAlignment="Center"/>
        <TextBlock Text="Y:" Margin="5,5,5,5"  Grid.Row="0" Grid.Column="2" VerticalAlignment="Center"/>
        <TextBox Name="TexBoxYTest2"  Margin="0,5,0,5" Grid.Row="0" Grid.Column="3" VerticalAlignment="Center"/>

        <Button Content="Кнопка1" Margin="5,0,5,5" HorizontalAlignment="Stretch" Grid.Row="1" Grid.ColumnSpan="5"/>
    </Grid>
</Border>

то получается так:
...
Рейтинг: 0 / 0
18.07.2020, 17:50
    #39981336
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эквивалент Panel
Shocker.Pro, Roman Mejtes,

Спасибо!
...
Рейтинг: 0 / 0
20.07.2020, 07:57
    #39981629
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эквивалент Panel
Вам уже писали, скачайте книгу и прочитайте. Ваши вопросы, это нулевой уровень в WPF.
Если не способны себя заставить, то не стоит браться за эту технологию. в WPF очень много "магии", без понимания того, как она работает тут ловить нечего
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Эквивалент Panel / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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