如何在窗口中绝对定位WPF嵌套控件

时间:2015-03-24 14:28:57

标签: wpf layout wpf-controls

我在一些面板中嵌套了一些控件。 面板本身在窗口内没有相同的x位置。

我希望面板内的控件相对于窗口具有固定位置,而不是面板(因此它们都垂直排列,在这种情况下)。

enter image description here

要明确的是,小组本身在窗口中有任意立场。可以想象,用户应该能够影响面板位置,但嵌套控件将坚持相对于窗口的相同X坐标。

我认为我不能使用Canvas,因为它是相对于画布边缘的定位。

有什么想法吗?

非常感谢。

1 个答案:

答案 0 :(得分:1)

请勿使用Panel ...而是使用Grid s。如果您使用Grid,那么您可以利用Grid.IsSharedSizeScope Attached PropertyColumnDefinition.SharedSizeGroup Property。使用这些列表,您可以将来自不同Grid的列排成一行,只要您有Grid属性设置为true的父IsSharedSizeScope

以下是MSDN上第一个链接页面的示例:

<StackPanel Orientation="Horizontal" DockPanel.Dock="Top">

<Grid ShowGridLines="True" Margin="0,0,10,0">
  <Grid.ColumnDefinitions>
    <ColumnDefinition SharedSizeGroup="FirstColumn"/>
    <ColumnDefinition SharedSizeGroup="SecondColumn"/>
  </Grid.ColumnDefinitions>
  <Grid.RowDefinitions>
    <RowDefinition Height="Auto" SharedSizeGroup="FirstRow"/>
  </Grid.RowDefinitions>

    <Rectangle Fill="Silver" Grid.Column="0" Grid.Row="0" Width="200" Height="100"/>
    <Rectangle Fill="Blue" Grid.Column="1" Grid.Row="0" Width="150" Height="100"/>

    <TextBlock Grid.Column="0" Grid.Row="0" FontWeight="Bold">First Column</TextBlock>
    <TextBlock Grid.Column="1" Grid.Row="0" FontWeight="Bold">Second Column</TextBlock>
</Grid>

<Grid ShowGridLines="True">
  <Grid.ColumnDefinitions>
    <ColumnDefinition SharedSizeGroup="FirstColumn"/>
    <ColumnDefinition SharedSizeGroup="SecondColumn"/>
  </Grid.ColumnDefinitions>
  <Grid.RowDefinitions>        
    <RowDefinition Height="Auto" SharedSizeGroup="FirstRow"/>
  </Grid.RowDefinitions>

    <Rectangle Fill="Silver" Grid.Column="0" Grid.Row="0"/>
    <Rectangle Fill="Blue" Grid.Column="1" Grid.Row="0"/>

    <TextBlock Grid.Column="0" Grid.Row="0" FontWeight="Bold">First Column</TextBlock>
    <TextBlock Grid.Column="1" Grid.Row="0" FontWeight="Bold">Second Column</TextBlock>
</Grid>

</StackPanel>