Как заставить TreeViewItem (s) существующего TreeView вызвать событие Click? - PullRequest
0 голосов
/ 31 марта 2012

Как заставить TreeViewItem (s) существующего WPF TreeView вызвать событие Click?

В настоящее время мы обрабатываем SelectedItemChanged. В нашем случае мы отображаем диалоги, поэтому пользователь может нажимать на один и тот же выбранный TreeViewItem несколько раз.

Ответы [ 3 ]

1 голос
/ 31 марта 2012

Рабочий образец

<Window x:Class="MenuExperiment1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow">
    <TreeView Name="treeView1"
              Height="320"
              Width="200">
        <TreeView.Resources>
            <Style TargetType="TreeViewItem">
                <EventSetter Event="MouseLeftButtonUp"
                             Handler="treeViewItem_MouseLeftButtonUp" />
                <EventSetter Event="KeyUp"
                             Handler="treeViewItem_KeyUp" />
            </Style>
        </TreeView.Resources>
        <TreeViewItem  Header="aa" />
        <TreeViewItem  Header="bb">
            <TreeViewItem Header="b1"></TreeViewItem>
            <TreeViewItem Header="b2"></TreeViewItem>
        </TreeViewItem>
        <TreeViewItem  Header="cc">
            <TreeViewItem Header="c1">
                <TreeViewItem Header="c1a"></TreeViewItem>
                <TreeViewItem Header="c1b"></TreeViewItem>
            </TreeViewItem>
            <TreeViewItem Header="c2"></TreeViewItem>
        </TreeViewItem>
        <TreeViewItem  Header="dd" />
    </TreeView>
</Window>

using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Diagnostics;

namespace MenuExperiment1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void treeViewItem_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            Handler(sender,e);
        }

        private void treeViewItem_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
                Handler(sender, e);
            }
        }

        private void Handler(object sender, InputEventArgs e)
        {
            e.Handled = true;
            Debug.Write(((TreeViewItem)sender).Header);
            Debug.WriteLine(" clicked");
        }
    }
}
0 голосов
/ 31 марта 2012

Вы можете использовать установщик событий в ItemContainerStyle из TreeView:

      <TreeView.ItemContainerStyle>
            <Style TargetType="TreeViewItem">
                <EventSetter Event="PreviewMouseLeftButtonDown" Handler="TreeViewItem_MouseLeftButtonDown" />
            </Style>
      </TreeView.ItemContainerStyle>
0 голосов
/ 31 марта 2012

Вы пытались использовать событие MouseLeftButtonUp? Вы должны быть в состоянии достичь того же UX, подключившись к этому событию, как и при действительном событии щелчка.

PreviewMouseLeftButtonDown и MouseLeftButtonDown также могут работать для вас в зависимости от макета ваших TreeViewItems (например, при использовании шаблона содержимого, содержащего TextBlock).

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