0

私はこれについてどうやって行くのだろうかと思っています。マウスがアイテム1、アイテム2、....の上にないことをよく確認できませんか? これを行うためのより良い方法があるはずです。ユーザーがアイテム以外のスペースをクリックした場合に、すべてのアイテムの選択を解除したいだけです。

4

1 に答える 1

1

やりたいことを実行できます...Clickハンドラーに次のコードを追加します。

HitTestResult hitTestResult = VisualTreeHelper.HitTest(uiElement, DragStartPosition);
TreeViewItem listBoxItem = hitTestResult.VisualHit.GetParentOfType<TreeViewItem>();
if (listBoxItem == null) 
{
    // user has clicked, but not on a TreeViewItem
}

メソッドは私が作成したGetParentOfType拡張メソッドで、次のとおりです。

public static T GetParentOfType<T>(this DependencyObject element) where T : DependencyObject
{
    Type type = typeof(T);
    if (element == null) return null;
    DependencyObject parent = VisualTreeHelper.GetParent(element);
    if (parent == null && ((FrameworkElement)element).Parent is DependencyObject) 
parent = ((FrameworkElement)element).Parent;
    if (parent == null) return null;
    else if (parent.GetType() == type || parent.GetType().IsSubclassOf(type)) 
return parent as T;
    return GetParentOfType<T>(parent);
}

拡張メソッドはクラスに配置する必要があることに注意してくださいstatic...必要に応じて、いつでも通常のメソッドにリファクタリングできます。

于 2013-08-15T13:11:33.707 に答える