0

ツリービューの親ノードにもいくつかの差別化を持たせて、ユーザーが自分の親であることを知る方法はありますか? セルを強調表示したり、テキストを変更したりすることができますが、フォルダー内のアイテムをクリックできるようにしたいのですが、親ノードが異なるため、ユーザーは自分がクリックした内容を知ることができます。

ありがとうございました。

4

1 に答える 1

2

モデルレベル-モデルクラスに「親」プロパティがあります。

TreeViewたとえば、再帰的に発言にバインドされているクラスがある場合MyItemClass

public class MyItemClass
{
    public string MyHeader { get; set; } //Header text of each tree view item.
    public MyItemClass Parent { get; set; } //Parent MyItemClass object.
    public List<MyItemClass> Children { get; set; } //Children MyItemClass
    public bool IsSelected { get; set; } //When tree view item is clicked & selected.
    public bool IsHighlighted { get; set; } //When parent is highlighted.
}

だから子供が選ばれたとき...

private bool _isSelected;
public bool IsSelected 
{
  get { retrn _isSelected; }
  set
  {
     _isSelected = value;

     //The line below highlights the parent when either of the child is selected.
     this.Parent.IsHighlighted 
         = this.Parent.Children.Where(item => item.IsSelected).Any();

     //Notify Property Changed here...
   } 
} 

だから親が強調するように...

private bool _isHighlighted;
public bool IsHighlighted
{
  get { retrn _isHighlighted; }
  set
  {
     _isHighlighted = value;

     //When a node is highlighted all its Parent nodes should be too.
     this.Parent.IsHighlighted 
         = this.Parent.Children.Where(item => item.IsHighlighted).Any();

     //Notify Property Changed here...
  } 
} 

IsHighlighted次に、ツリービューアイテムのデータコンテキストの削除を解除してこのフラグを使用し、それに適切なスタイルを適用できますTreeViewItem

    <TreeView ItemsSource="{Binding MyItems}">
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding Children}">
                <TextBlock Text="{Binding MyHeader}">
                    <TextBlock.Style>
                        <Style TargetType="{x:Type TextBlock}">
                             <Style.Triggers>
                                <DataTrigger Binding="{Binding IsHighlighted}"
                                             Value="True">
                                    <Setter Property="FontWeight" Value="Bold"/>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </TextBlock.Style>
                </TextBlock>
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>

アイテムクラスのすべてのプロパティに実装するようにしてください。実装INotifyPropertyChangedしないと、これらの効果は機能しません。

于 2012-07-31T12:15:50.667 に答える