代码之家  ›  专栏  ›  技术社区  ›  cellik

使用gridsplitter自动调整treeview的宽度

  •  0
  • cellik  · 技术社区  · 15 年前

    我有一个带网格的silverlight3.0应用程序。XAML在下面。 我希望在用户更改左栏的宽度时调整TreeView控件的大小并包装内容。当前,treeview显示滚动条而不是换行。 在右边的列中,这可以正常工作,因为没有treeview,只有stackpanel。

    当我使用HierarchycalDataTemplate而不是静态TreeViewItem时,也会发生同样的情况。

    你有什么想法可以让它工作吗?

    -抄送

      <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 回复  |  直到 15 年前
        1
  •  0
  •   Zodman    15 年前

    该死我来到这里只是想为这个问题寻找答案。

    我能做的最好的事情就是将TextBlock的MaxWidth绑定到TreeView的大小,并提供一个偏移量。为(WPF)树状视图尝试此XAML,并摆脱封闭的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>
    

    您需要编写一个执行偏移的值转换器,并确保树的每个级别的偏移都足够大,以便在滑动拆分器时不会出现水平滚动条。

    这种技术的一个问题是,当我在HierarchicalDataTemplate上尝试相同的MaxWidth绑定时,Blend 3抱怨XAML无效,我得到了红色的波形。当然它仍然在运行,但我期待着为Blend更新XAML解析器!