如何在具有父子关系的2个wpf控件之间使用SharedSizeScope

本文关键字:控件 wpf 之间 SharedSizeScope 2个 父子关系 | 更新日期: 2023-09-27 18:29:41

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

主要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>

如何在具有父子关系的2个wpf控件之间使用SharedSizeScope

您可以使用Grid.IsSharedSizeScopeColumnDefinitionRowDefinition上的SharedSizeGroup属性同步行高和列宽。

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

Ia是您使用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>

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