0

我在 WPF 中使用 Telerik TreeView,并且使用 HierarchicalDataTemplate 来显示节点。节点代表匹配的项目 - 可以是仅左、仅右、相等或不等(基于树的比较)。

我目前正在使用 DataTemplateSelector 从四个模板之一中进行选择,这些模板看起来都类似于以下内容:

    <HierarchicalDataTemplate x:Key="EqualTreeItemTemplate" ItemsSource="{Binding}">
        <Grid Name="rowGrid" HorizontalAlignment="Stretch" Height="Auto" d:DataContext="{d:DesignInstance Carbon:ICarbonComparisonPair }">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="16" />
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <Path Data="F1M574.042,314.611L533.8,344.398 522.251,328.798 515.235,333.988 526.786,349.593 526.782,349.596 531.978,356.603 579.235,321.622 574.042,314.611z" Stretch="Uniform" Fill="#FF000000" Width="16" Height="16" VerticalAlignment="Center" Margin="0,0,0,0" />
            <TextBlock Grid.Column="1" Text="{Binding ObjectName}" Style="{StaticResource ObjectNameStyle}" Margin="4,0,0,0" />
            <TextBlock Grid.Column="2" Text="{Binding ObjectName}" Style="{StaticResource ObjectNameStyle}" Margin="4,0,0,0" />
        </Grid>
    </HierarchicalDataTemplate>

我遇到的问题是项目内容区域的宽度根据项目出现的树的级别而不同。这意味着我没有排列的列 - 右侧列中的文本移动对于您扩展的树的每个级别,向右一点。

我想做的是将右侧网格列的宽度指定为整个树控件大小的 50%,而不是网格自然区域的 50%。我想也许我可以通过与 RelativeSource 的绑定来做到这一点,但我似乎无法让它工作。有没有办法在 XAML 中实现这一点,还是我需要求助于代码隐藏?

4

1 回答 1

1

如果我理解正确,您希望列索引 2 在所有项目中对齐?

查看 TreeListView 控件,看看它是否能满足您的需求。

Silverlight 演示在这里(只是为了让您可以看到它的外观 - WPF 版本几乎相同)

[编辑 - 更多信息] ColumnDefinition 上的 SharedGroupName 属性很诱人,但由于缩进,它不会完全起作用 - 你最终会得到第 1 列或第 2 列中的所有内容的大小相同,但令人讨厌缩进仍然把它扔掉。查看 ListView 的 View 属性。我相信它至少与 Telerik TreeListView 的精神相同,如果不是在实现上类似的话。

这是一篇关于如何使用它的不错的文章。(具有讽刺意味的是,我将该页面标记在一个名为“TreeGridList”的文件夹中,所以显然在某些时候我有这样做的想法来完成类似的事情:))

于 2012-08-28T14:15:03.937 回答