当“进入”时,如何在treeview中引发事件键点击

本文关键字:事件 treeview 进入 | 更新日期: 2023-09-27 18:02:35

我正试图找到一种优雅的方式,如何在键盘上按下"enterkey"时引发事件。

<TreeView 
Grid.Row="0" 
Name="Topics"            
VerticalAlignment="Stretch" 
HorizontalAlignment="Stretch" 
MouseDoubleClick="Topics_MouseDoubleClick"
KeyUp="treeViewItem_KeyUp"
ItemsSource="{Binding TierOneItems}"
SelectedItemChanged="treeView1_SelectedItemChanged">

in my example .cs

private void treeViewItem_KeyUp(object sender, KeyEventArgs e)
{
    TreeView topic = sender as TreeView;
    string keyValue = e.Key.ToString();
    if (keyValue == "Return")
    {
        //do something here
    }
}

这段代码工作并按预期完成工作,但从其他人的角度来看有些不同。

当“进入”时,如何在treeview中引发事件键点击

当你用XAML编程时,你可以使用行为(声明的方式)

首先需要的命名空间是

xmlns:i="http://schemas.microsoft.com/expression/2009/interactivity"

那么你的代码需要删除事件附加(直接耦合),我试图重写你的代码为相同的

XAML

<TreeView 
...
ItemsSource="{Binding TierOneItems}">
    <i:Interaction.Behaviors>
        <b:RaiseEventBehavior/>
    </i:Interaction.Behaviors>
</TreeView >

RaiseEventBehavior.cs

public class RaiseEventBehavior : Behavior<UIElement>
{
    protected override void OnAttached()
    {
        AssociatedObject.KeyUp += (sender, e) => 
        {
            TreeView topic = sender as TreeView;
            string keyValue = e.Key.ToString();
            if (keyValue == "Return")
            {
             //do something here
            }
        };
    }
}

以上只是一个基于您的查询的例子,请随意调整。这种方法最适合XAML、利用行为并看到XAML

的真正美妙之处

您可以使用Keyboard类的IsKeyUp方法来检查特定的键是否被释放。

if (Keyboard.IsKeyUp(Key.Enter))
{
    //do something here
}

我们是这样处理的

    private new void PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Return)
        {
            ((SomeVM)this.DataContext).EditSelectedItem();
        }
        else if (e.Key == Key.Delete && this.TreeView.SelectedItem != null &&
            this.TreeView.SelectedItem is DiffVM)
        {
            ((SomeVM)this.DataContext).DeleteDiffV();
        }
     }