如何正确居中 WPF 画布
本文关键字:WPF 画布 何正确 | 更新日期: 2023-09-27 18:32:40
我有一个全屏对话框,想要居中画布。例如,它似乎适用于标签的垂直/水平对齐网格,但是当我尝试这样做时,左上角会居中而不是画布的中间:
<Window
Title=""
Topmost="True" WindowStyle="None" WindowState="Maximized"
>
<Grid>
<Grid VerticalAlignment="Center" HorizontalAlignment="Center">
<Canvas>
<Border Margin="20"
Background="White"
BorderBrush="Black"
BorderThickness="2"
Padding="20" >
<DockPanel Margin="10">
<StackPanel DockPanel.Dock="Top" Margin="0 0 0 50"
Orientation="Vertical">
<Label FontSize="32" Content="Hello"></Label>
</StackPanel>
<StackPanel HorizontalAlignment="Right"
DockPanel.Dock="Bottom"
Orientation="Horizontal">
<Label FontSize="32" Content="Hello"></Label>
</StackPanel>
</DockPanel>
</Border>
</Canvas>
</Grid>
这是因为您尚未在画布上设置宽度和高度,对于画布,实际宽度和实际高度属性(用于布局)默认为 0。
您可以通过在画布上设置背景来测试这一点 - 在您的情况下,由于上述原因,背景颜色不会呈现。
要解决此问题,请执行以下操作之一:
- 选择另一个容器(例如Grid),该容器可以根据孩子的尺寸进行调整
- 显式设置画布上的宽度和高度。
您可以将边框作为网格而不是画布的子项。(网格可以有多个子项)试试这个:
<Window
Title=""
Topmost="True" WindowStyle="None" WindowState="Maximized"
>
<Grid>
<Canvas HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Rectangle Canvas.Left="40" Canvas.Top="31" Width="630" Height="41" Fill="Blue" />
<Ellipse Canvas.Left="130" Canvas.Top="79" Width="580" Height="580" Fill="Blue" />
<Path Canvas.Left="61" Canvas.Top="28" Width="133" Height="98" Fill="Blue" Stretch="Fill" Data="M61,325 L293,28" />
</Canvas>
<Border Margin="20"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Background="WhiteSmoke"
BorderBrush="Black"
BorderThickness="2"
Padding="20">
<DockPanel Margin="10">
<StackPanel DockPanel.Dock="Top" Margin="0 0 0 50" Orientation="Vertical">
<Label FontSize="32" Content="Hello" />
</StackPanel>
<StackPanel HorizontalAlignment="Right"
DockPanel.Dock="Bottom"
Orientation="Horizontal">
<Label FontSize="32" Content="Hello" />
</StackPanel>
</DockPanel>
</Border>
</Grid>
</Window>