1

クリックイベントをTreeViewItemにアタッチするにはどうすればよいですか?

以下はTextBlockで機能しますが、TreeViewItemでは機能しません。

XAML:

<Window x:Class="TestClickTree2343.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <Style TargetType="TreeViewItem">
            <Setter Property="IsExpanded" Value="True" />
        </Style>
    </Window.Resources>

    <StackPanel>
        <TextBlock Text="Click this" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown"/>
        <TreeViewItem Header="Files">
            <TreeViewItem Header="File 1">
                <TreeViewItem Header="Part 1">
                    <TreeViewItem Header="Paragraph 1" MouseLeftButtonDown="TreeViewItem_MouseLeftButtonDown"/>
                    <TreeViewItem Header="Paragraph 2"/>
                </TreeViewItem>
            </TreeViewItem>
        </TreeViewItem>
    </StackPanel>
</Window>

コードビハインド:

using System.Windows;
using System.Windows.Input;

namespace TestClickTree2343
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        private void TreeViewItem_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            MessageBox.Show("treeview item was clicked, this does NOT work");
        }

        private void TextBlock_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            MessageBox.Show("textblock item was clicked, this WORKS");
        }
    }
}
4

2 に答える 2

4

MouseLeftButtonDown ではなく、PreviewMouseLeftButtonDown イベントを使用しようとしています。

MSDN のドキュメントによると、Direct ルーティング戦略を使用してPreviewMouseLeftButtonDownMouseLeftButtonDownの両方を使用しているため、なぜそうなのかよくわかりません。ただし、通常、「プレビュー」イベントはトンネリング戦略を使用し、対応するイベントはバブルを使用するため、ドキュメントが正しくない可能性があります。

于 2009-10-14T14:46:55.983 に答える
0

上記の解決策は機能しますが、親ノードでクリックしたときにツリービュー ノードを展開できなくなります。

よろしく

于 2012-11-23T05:01:46.433 に答える