【问题标题】:Setting width in a data template based on the size of a parent control根据父控件的大小在数据模板中设置宽度
【发布时间】:2012-08-28 10:10:56
【问题描述】:

我在 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 中实现这一点,还是我需要求助于代码隐藏?

【问题讨论】:

    标签: wpf treeview telerik


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 我确实看到了那个,但我正在寻找一种专门在 TreeView 中执行此操作的方法 - 部分原因是我正在尝试扩展我的 WPF 知识。但我可能会认输并选择 TreeListView。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 2011-05-20
    • 2022-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多