2012-04-02 64 views
2

我有一个场景,我有一个控件,它使用另一个控件通过ListBox.ItemTemplate。我需要分享这两个控件之间的高度和宽度。我们如何实现这一目标?如何在2个wpf控件和父子关系之间使用SharedSizeScope?

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

视图2 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

可以同步行高和使用Grid.IsSharedSizeScope列宽和ColumnDefinitionSharedSizeGroup属性, RowDefinition

我不知道你需要在XAML中要同步的元素,但一个例子可能如下:

IA使用Grid.IsSharedSizeScope =“真”

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

然后所有的TextBlocks将具有相同的宽度。