如何在2个wpf控件与父子关系之间使用SharedSizeScope?

时间:2012-04-02 13:57:57

标签: c# wpf xaml wpf-controls

我有一个场景,我有一个控件,它通过ListBox.ItemTemplate使用另一个控件。我需要在这两个控件之间共享高度和宽度。我们怎样才能做到这一点?

Main Conrol Xaml如下所示:

 <Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>

    <Grid >
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition />
        </Grid.RowDefinitions>
        <TextBlock Grid.Row="0"
                   Text="{Binding Path=Caption,
                                  Mode=OneWay}" />
        <TextBlock Grid.Row="1"
                   Text="{Binding Path=Caption2,
                                  Mode=OneWay}" />
    </Grid>

    <ListBox Grid.Row="0"
             Grid.Column="1"
             ItemsSource="{Binding Path=ViewModels}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Views:View2 />
            </DataTemplate>

  </ListBox.ItemTemplate>
  <ListBox.ItemsPanel>
    <ItemsPanelTemplate>
      <StackPanel Orientation="Horizontal"></StackPanel>
    </ItemsPanelTemplate>
  </ListBox.ItemsPanel>
</ListBox>

View2 xaml如下所示:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
        <RowDefinition />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
    </Grid.ColumnDefinitions>

    <TextBlock Grid.Row="0"
               Grid.Column="0"
               Text="{Binding Path=Value,
                              Mode=OneWay}"/>


    <TextBlock  Text="{Binding Path=Value2,
                              Mode=OneWay}"
                                Grid.Row="1"
                                Grid.Column="0"
                               />
</Grid>

1 个答案:

答案 0 :(得分:2)

您可以使用Grid.IsSharedSizeScopeSharedSizeGroup以及ColumnDefinition上的RowDefinition属性同步行高和列宽。

我不确定您需要在Xaml中同步哪些元素,但示例可能如下:

我使用的父元素 Grid.IsSharedSizeScope =“True”

<Grid IsSharedSizeScope="true">
   ..
</Grid>

这会同步在该范围内具有相同SharedSizeGroup的任何列(或行)(您可以拥有多个嵌套范围)。

因此,如果您的view.xaml看起来像这样

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
        <RowDefinition />
    </Grid.RowDefinitions>

    <Grid.ColumnDefinitions>
        <ColumnDefinition SharedSizeGroup="column1"/>
    </Grid.ColumnDefinitions>

    <TextBlock Grid.Row="0" Grid.Column="0" Text="{Binding Path=Value, Mode=OneWay}"/>
    <TextBlock Text="{Binding Path=Value2, Mode=OneWay}" Grid.Row="1" Grid.Column="0"/>
</Grid>

然后所有文本块都具有相同的宽度。