автоматическое изменение ширины дерева в виде сетки - PullRequest
0 голосов
/ 29 июля 2009

У меня есть приложение silverlight3.0 с сеткой. XAML ниже. Я хотел бы изменить размер элемента управления TreeView и обернуть содержимое, когда пользователь изменяет ширину левого столбца. В настоящее время древовидная структура отображает полосу прокрутки вместо переноса. В правом столбце это работает нормально, так как нет дерева, но есть панель стека.

То же самое происходит, когда я использую HierarchicalDataTemplate вместо статических элементов дерева.

Есть идеи, как заставить это работать?

Спасибо, -cc

  <Grid x:Name="LayoutRoot" Background="Aqua">


            <Grid.RowDefinitions>
                <RowDefinition />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition />
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition  />
            </Grid.ColumnDefinitions>
        <StackPanel Orientation="Vertical" Grid.Column="0"  Background="Yellow">
            <controls:TreeView  >

                <controls:TreeViewItem Header="test1 some text some text some text some text some text">
                    <controls:TreeViewItem Header="test1.1 some text some text some text some text some text">
                    </controls:TreeViewItem>
                </controls:TreeViewItem>
                <controls:TreeViewItem    Header="test2 some text some text some text some text some text some text some text some text some text some text some text">
                    <controls:TreeViewItem Header="test2 some text some text some text some text some text some text some text some text some text some text some text">
                    </controls:TreeViewItem>

                </controls:TreeViewItem>
            </controls:TreeView>
        </StackPanel>
        <controls:GridSplitter Grid.Row="0" Grid.Column="1" Width="5" VerticalAlignment="Stretch" 
                                       HorizontalAlignment="Center" Background="AliceBlue"/>
        <StackPanel Grid.Column="2" Orientation="Vertical">
            <TextBlock TextWrapping="Wrap"> dwd kwdh wkd wkd wkd wkjd hwkdjhw kdw dkw k</TextBlock>
            <TextBlock TextWrapping="Wrap"> dwd kwdh wkd wkd wkd wkjd hwkdjdwd kwdh wkd wkd wkd wkjd hwkdjhw kdw dkw k</TextBlock>
        </StackPanel>
    </Grid>

1 Ответ

0 голосов
/ 22 января 2010

Блин; Я приземлился здесь в поисках ответа только на этот вопрос.

Лучшее, что я могу сделать, - это связать MaxWidth TextBlock с размером TreeView и предоставить смещение. Попробуйте этот XAML для (WPF) TreeView и избавьтесь от этой вмещающей StackPanel:

    <TreeView>
        <TreeViewItem>

            <TreeViewItem.Header>
                <TextBlock
                    Text="Maecenas praesent accumsan bibendum dictumst eleifend facilisi faucibus habitant inceptos interdum lobortis nascetur pharetra placerat "
                    Background="Azure"
                    TextWrapping="Wrap"
                    MaxWidth="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TreeView}}, Path=ActualWidth, Converter={StaticResource ValueSubtractor}, ConverterParameter=30}"
                />
            </TreeViewItem.Header>

            <TextBlock
                Text="Faucibus habitant inceptos interdum lobortis nascetur pharetra placerat pulvinar sagittis senectus sociosqu suscipit torquent ultrices"
                Background="#FFBDBDE6"
                TextWrapping="Wrap"
                MaxWidth="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TreeView}}, Path=ActualWidth, Converter={StaticResource ValueSubtractor}, ConverterParameter=50}"
            />

            <TextBlock
                Text="Placerat pulvinar sagittis senectus sociosqu suscipit torquent ultrices vehicula volutpat maecenas praesent accumsan bibendum dictumst"
                Background="#FF9090E0"
                TextWrapping="Wrap"
                MaxWidth="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TreeView}}, Path=ActualWidth, Converter={StaticResource ValueSubtractor}, ConverterParameter=50}"
            />

        </TreeViewItem>
    </TreeView>

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

Одна проблема, с которой я столкнулся при использовании этого метода, заключается в том, что, когда я пытаюсь использовать ту же самую привязку для MaxWidth на HiearchicalDataTemplate, смесь 3 жалуется, что XAML недействителен, и я получаю красные кривые. Конечно, он все еще работает, но я с нетерпением жду обновления парсера XAML для Blend!

...