私は 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 でこれを実現する方法はありますか、またはコード ビハインドに頼る必要がありますか?