0

私は WPF でテレリック TreeView を使用しており、HierarchicalDataTemplate を使用してノードを表示しています。ノードは、一致したアイテムを表します。左のみ、右のみ、等しい、または等しくない (ツリー ベースの比較) ことができます。

現在、DataTemplateSelector を使用して 4 つのテンプレートから 1 つを選択しています。これらはすべて次のようになります。

    <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 に答える