Как получить TreeViewItem, используя координату / точку через HitTesting в WPF? - PullRequest
3 голосов
/ 22 апреля 2011

Я пытаюсь получить TreeViewItem под мышью, но не могу найти способ сделать это.

В настоящее время я использую это:

Layer GetItemAtLocation ( Point point )
{
    HitTestResult result = VisualTreeHelper.HitTest ( this, point );
    FrameworkElement element = result.VisualHit as FrameworkElement;
    if ( element != null )
        return element.DataContext as Layer;

    return null;
}

Этот методполезно, но это не дает TreeViewItem под мышью.

Есть идеи, как это сделать?

1 Ответ

4 голосов
/ 22 апреля 2011

Вы не указываете, что привело вас к этому, что немного помогло бы.

Это немного противно, но вы могли бы сделать это:

IInputElement dropNode = tree.InputHitTest(point);

Это будетвозможно, вы получите TextBlock, поэтому вам придется использовать VisualTreeHelper.GetParent () для перемещения вверх по TextBlock, ContentPresenter, Border, Grid, а затем, в конечном итоге, TreeViewItem.

Это, конечно, не самый хороший подход, но это должно сработать.

В зависимости от того, что вы делаете, в блоге Майка Хилберга был предложен подход с использованием прикрепленных свойств, который используется в триггере.См. здесь

В своем примере он превращает TreeViewItem в зеленый цвет, когда мышь над ним.

<TreeView.Resources>
      <Style TargetType="TreeViewItem">
        <Style.Triggers>
          <Trigger Property="local:MyTreeViewHelper.IsMouseDirectlyOverItem" Value="True">
            <Setter Property="Background" Value="Green" />
          </Trigger>
        </Style.Triggers>
      </Style>
    </TreeView.Resources>

Класс MyTreeViewHelper отслеживает MouseEnter / MouseLeaveсобытия, и дает хорошее свойство, которое можно использовать в триггерах и тому подобном, как показано выше.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...