Размер строки / столбца сетки WPF в пропорции к желаемому размеру? - PullRequest
1 голос
/ 27 марта 2010

У меня есть два пользовательских элемента управления, расположенных вертикально в сетке, оба из которых могут расширяться, чтобы быть выше, чем сетка может вместить. Я поместил их в каждый в scrollviewer , который функционально работает. Однако я хочу дать им пространство пропорционально количеству, которое они хотят во время выполнения.

Таким образом, если доступно 500 высот, верхний элемент управления хочет 400, а нижний 600, верхний элемент управления получит 200, а нижний 300.

Во время разработки я понятия не имею, сколько места потребуется каждому из них пропорционально другому, поэтому использование 1 *, 2 * и т. Д. Для высоты строки мне не подойдет.

Я могу вручную кодировать пропорциональное определение размера во время выполнения, но мне не хватает простого трюка в XAML, который бы дал мне то, что я хочу?

Контекст выглядит следующим образом (сокращено для краткости) ...

<Grid>
    <TabControl>
        <TabItem>
            <Grid>
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="*"/>
                        <RowDefinition Height="*"/>
                    </Grid.RowDefinitions>
                    <GroupBox Grid.Row="0" Header="Title Area" />
                    <ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto">
                        <UserControl />
                    </ScrollViewer>
                    <ScrollViewer Grid.Row="2" VerticalScrollBarVisibility="Auto">
                        <UserControl />
                    </ScrollViewer>
                </Grid> 
            </Grid>
        </TabItem>
    </TabControl>    
</Grid>

1 Ответ

1 голос
/ 29 марта 2010

Я пойму, что в XAML нет простого способа сделать это, поэтому у меня есть , использующий кодовый код. Таким образом, я сделал это в XAML;

<Grid>
    <TabControl>
        <TabItem>
            <Grid>
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Name="FooRow" Height="*"/>
                        <RowDefinition Name="BarRow" Height="*"/>
                    </Grid.RowDefinitions>
                    <GroupBox Grid.Row="0" Header="Title Area" />
                    <ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto">
                        <UserControl Name="Foo" SizeChanged="Foo_SizeChanged" />
                    </ScrollViewer>
                    <ScrollViewer Grid.Row="2" VerticalScrollBarVisibility="Auto">
                        <UserControl Name="Bar" SizeChanged="Bar_SizeChanged" />
                    </ScrollViewer>
                </Grid>
            </Grid>
        </TabItem>
    </TabControl>
</Grid>

В коде позади;

    private void Foo_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        FooRow.Height = new GridLength(e.NewSize.Height, GridUnitType.Star);
    }

    private void Bar_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        BarRow.Height = new GridLength(e.NewSize.Height, GridUnitType.Star);
    }

Вы также можете сделать это с привязками и ValueConverter.

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