Reputation: 455
I have a full screen dialog and want to center a canvas. It seems to work well with a grid with Vertical/Horizontalalignment for a Label for example, but when I try this the top left corner gets centered instead of the middle of the canvas:
<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>
Upvotes: 2
Views: 7111
Reputation: 17637
You can put the Border as child of Grid instead of Canvas. (The Grid can have more than one child) Try this:
<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>
Upvotes: 1
Reputation: 10533
That's because you haven't set a Width and Height on your canvas, and in in the case of a canvas, the ActualWidth and ActualHeight properties (which are used for layout) default to 0.
You can test this by setting the Background on the Canvas - in your case, the background color won't be rendered because of the aforementioned reason.
To work around this do one of the following:
Upvotes: 4