根据父控件的大小在数据模板中设置宽度

时间:2012-08-28 10:10:56

标签: wpf treeview telerik

我在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>

我遇到的问题是项目内容区域是基于项目所在树的级别的不同宽度。这意味着我没有排列的列 - 右侧的文本对于您展开的树的每个级别,hand列向右移动一点。

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

1 个答案:

答案 0 :(得分:1)

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

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

Silverlight演示here(只是这样你可以看到它的样子 - WPF版本几乎相同)

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

Here's a decent writeup关于如何使用它。 (具有讽刺意味的是,我将该页面标记在一个名为“TreeGridList”的文件夹中,所以显然在某些时候我有想法这样做以实现类似的东西:))