Как использовать SharedSizeScope между двумя элементами управления wpf с родительским дочерним отношением? - PullRequest
2 голосов
/ 02 апреля 2012

У меня есть сценарий, где у меня есть один элемент управления, который использует другой элемент управления через 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 Ответ

2 голосов
/ 02 апреля 2012

Вы можете синхронизировать высоту строки и ширину столбца, используя Grid.IsSharedSizeScope и атрибут SharedSizeGroup для 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>

Тогда все текстовые блоки будут иметь одинаковую ширину.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...