6

WPF TreeViewに2レベルの階層を表示していますが、子ノードのみを選択可能にする必要があります。基本的に、最上位ノードは分類用ですが、単独で選択することはできません。

これを達成できますか?

ありがとう...

4

4 に答える 4

5

Bijington が書いたように、アイテムの種類ごとにスタイルを定義します。選択不可能なノードの場合、コンテナー (TreeView の場合は TreeViewItem) の Focusable-Property を false に設定します。

于 2011-01-21T13:06:43.977 に答える
2

そのためには、ツリービューのスタイルをオーバーライドする必要があります。理想的には、2 種類のツリービュー アイテムを最上位ノード (フォルダーを想定しています) 用に、もう 1 つは単純に子用に用意し、ツリー内の各アイテム タイプがどのように動作するかを定義できるようにする必要があります。そのため、アイテム タイプごとにスタイルを作成してから、フォルダー ノードのトリガーを変更して、何もしないように選択します。

于 2008-10-30T13:10:06.093 に答える
0

選択するとすぐにtreeviewitemの選択を解除する添付プロパティに書きました:

public class TreeViewItemHelper
{
    public static bool GetIsSelectable(TreeViewItem obj)
    {
        return (bool)obj.GetValue(IsSelectableProperty);
    }

    public static void SetIsSelectable(TreeViewItem obj, bool value)
    {
        obj.SetValue(IsSelectableProperty, value);
    }

    public static readonly DependencyProperty IsSelectableProperty =
        DependencyProperty.RegisterAttached("IsSelectable", typeof(bool), typeof(TreeViewItemHelper), new UIPropertyMetadata(true, IsSelectablePropertyChangedCallback));

    private static void IsSelectablePropertyChangedCallback(DependencyObject o, DependencyPropertyChangedEventArgs args)
    {
        TreeViewItem i = (TreeViewItem) o;
        i.Selected -= OnSelected;
        if(!GetIsSelectable(i))
        {
            i.Selected += OnSelected;
        }
    }

    private static void OnSelected(object sender, RoutedEventArgs args)
    {
        if(sender==args.Source)
        {
            TreeViewItem i = (TreeViewItem)sender;
            i.IsSelected = false;
        }
    }
}

残念ながら、選択できないアイテムをクリックすると、古い選択が失われます:(

于 2009-07-27T09:05:24.360 に答える
0

次のように、すべての子ノードに子ノードがないことを前提として、スタイルでトリガーを使用して子ノードのみを選択可能にすることができます。

<TreeView Name="MyTreeView>
    <TreeView.ItemContainerStyle>
         <Style TargetType="{x:Type TreeViewItem}">
             <Style.Triggers>
                 <Trigger Property="HasItems" Value="true">
                     <Setter Property="Focusable" Value="False" />
                 </Trigger>
             </Style.Triggers>
          </Style>
     </TreeView.ItemContainerStyle>
</TreeView>

親 TreeViewItems で Focusable を false に設定すると、それらが選択されなくなります。

于 2018-10-18T08:34:17.147 に答える