Странное отображение окна в WPF
До этого в основном работал с WinForms, поэтому не понимаю многих вещей. У меня есть конкретная ширина окна в 750px, внутри DockPanel и уже внутри него есть две кнопки сбоку по 25px и грид в 700px посередине. В теории все логично: 25 + 25 + 700 = 750, и в дизайнере выглядит ровно:
Но на выходе я получаю это:
Видно, что боковые кнопки имеют разный размер. При том, что WindowStyle стоит в None, но сверху есть плашка. Весь код:
<Window x:Class="Widget.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:Widget"
mc:Ignorable="d"
Title="MainWindow" Height="75" Width="750" WindowStyle="None">
<DockPanel>
<Button Width="25" DockPanel.Dock="Left"></Button>
<Grid Width="700">
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button Grid.Column="0"></Button>
<Button Grid.Column="1"></Button>
<Button Grid.Column="2"></Button>
<Button Grid.Column="3"></Button>
<Button Grid.Column="4"></Button>
<Button Grid.Column="5"></Button>
<Button Grid.Column="6"></Button>
<Button Grid.Column="7"></Button>
</Grid>
<Button Width="25" DockPanel.Dock="Right"></Button>
</DockPanel>
</Window>
Ответы (1 шт):
В WPF
- Не надо ориентироваться на дизайнер, разметка в дизайнере может отличаться от разметки на результате, это нормально
- Не надо задавать расстояния и размеры в пикселях, максимум что можно в пикселях - это маленькие отступы
<Window x:Class="WpfAppGrid.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:WpfAppGrid"
mc:Ignorable="d"
Title="MainWindow" Height="75" Width="750" WindowStyle="None">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"></ColumnDefinition>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="1*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button Grid.Column="0"></Button>
<Button Grid.Column="1"></Button>
<Button Grid.Column="2"></Button>
<Button Grid.Column="3"></Button>
<Button Grid.Column="4"></Button>
<Button Grid.Column="5"></Button>
<Button Grid.Column="6"></Button>
<Button Grid.Column="7"></Button>
<Button Grid.Column="8"></Button>
<Button Grid.Column="9"></Button>
</Grid>
</Window>
Но лучше использовать ItemsControl и привязку данных, чтобы не плодить повторяющийся код. WPF очень сильно отличается от Winforms, он проще, но используется совершенно другой подход к разработке (пример с объяснением, здесь много и других примеров, в том числе моих).

