Совместное использование ширины столбцов между несколькими элементами управления WPF - PullRequest
18 голосов
/ 21 декабря 2010

Есть ли способ разделения ширины столбцов между элементами управления, а не только между несколькими сетками на одном элементе управления?

Грубая диаграмма того, что я пытаюсь получить:

alt text

В настоящее время я возился с получением ширины надписей в первом столбце каждого UserControl, но кажется грязным решением, которое сильно загружает процессор (поиск надписей и вычисление ширины текста до его визуализации противный!).

Я читал о SharedSizeGroups столько, сколько смогу найти, но ничто не говорит о том, что они работают с разными элементами управления. Есть ли простое или даже менее простое решение, которое не является абсолютно отвратительным?!

Ответы [ 3 ]

29 голосов
/ 21 декабря 2010

Оба предыдущих ответа верны.Вот пример (взятый в основном из MSDN ) о том, как вы можете использовать это на двух различных элементах управления UserControl, установив Grid.IsSharedSizeScope = "True" в родительском контейнере.Обратите внимание на атрибут SharedSizeGroup в ColumnDefinition.Вы можете увидеть эффект, переключив Grid.IsSharedSizeScope True / False

MainWindow

<StackPanel Grid.IsSharedSizeScope="True">
    <my:UserControl1 HorizontalAlignment="Left" x:Name="userControl11" />
    <my:UserControl2 HorizontalAlignment="Left" x:Name="userControl21" />
</StackPanel>

UserControl1

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

</UserControl>

UserControl2

<UserControl ...>
    <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" />
        <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>
</UserControl>
8 голосов
/ 21 декабря 2010

Необходимо установить для свойства IsSharedSizeScope значение true для элемента управления, содержащего оба элемента UserControls

5 голосов
/ 21 декабря 2010

Вы пытались установить Grid.IsSharedSizeScope = "True" для каждого пользовательского элемента управления?

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