powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Эквивалент Panel
15 сообщений из 15, страница 1 из 1
Эквивалент Panel
    #39978163
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!

Из такого скриншота нужно нарисовать форму на WPF.
...
Рейтинг: 0 / 0
Эквивалент Panel
    #39978166
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласно такому сопоставлению 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
Эквивалент Panel
    #39978167
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажите, как правильно написать?
...
Рейтинг: 0 / 0
Эквивалент Panel
    #39978207
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk
Согласно такому сопоставлению Panel для WindowsForm эквивалентен Canvas для WPF.
забудь и никогда больше не открывай
не надо тащить за собой подход WF в WPF

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

В данном случае, в общем-то, всё делается на Grid-ах.
Тебе нужно опеределиться, что и как должно масштабироваться при растягивании формы и от этого плясать.
Вряд ли ты захочешь конпку4 на весь экран
обычно такие окна одного размера.
Canvas панель нужна в крайне редких случаях, без ума эту панель лучше не брать вообще. А в будущем сами сможете создавать панели.
ограничитесь пока Grid, UniformGrid, StackPanel, DockPanel и WrapPanel.
Разметка в WPF чем то похожа на Web, очень и очень условно, по этому ориентируйтесь на декларативных подход, макетирование (панели) и связывание. ну и без MVVM можно даже не пытаться, будет боль и вам тут не помогут, я уж точно :)
...
Рейтинг: 0 / 0
Эквивалент Panel
    #39978277
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes
обычно такие окна одного размера.
фиксированного ты имеешь ввиду? я категорически против. Тут, к примеру, есть грид. Вопрос в том, что можно растягивать только грид, а может ТС захочет, чтобы текстовые поля растягивались пропорционально, скажем 30% от ширины формы. Вертикально грид явно должен растягиваться. Кнопки - вряд ли, но тоже могут, к примеру до некоего MaxHeight
...
Рейтинг: 0 / 0
Эквивалент Panel
    #39978455
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Эквивалент Panel
    #39978456
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажите, как правильно задать Border вокруг ввода X , Y и Кнопка1 как из первого скриншота?
...
Рейтинг: 0 / 0
Эквивалент Panel
    #39978667
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk
Скажите, как правильно задать Border вокруг ввода X , Y и Кнопка1 как из первого скриншота?
Код: xml
1.
      <Border BorderThickness="1" BorderBrush="Black" Padding="5">

но может быть ты прочтешь учебник (а не дурацкие сопоставления с винформс), чтобы узнать какие готовые контролы существуют в WPF, чтобы не задавать таких элементарных вопросов?
...
Рейтинг: 0 / 0
Эквивалент Panel
    #39980900
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал два варианта. Первый вариант с наложением, второй - без.
Код: 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
Эквивалент Panel
    #39980988
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
2.
3.
4.
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="3*"/>
...
Рейтинг: 0 / 0
Эквивалент Panel
    #39981332
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes
Код: xml
1.
2.
3.
4.
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="3*"/>

Получается так. Но X и Y растягиваются по ширине.
...
Рейтинг: 0 / 0
Эквивалент Panel
    #39981335
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если так написать
Код: 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
Эквивалент Panel
    #39981336
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, Roman Mejtes,

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


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