单击“Enter”键时如何在树视图中引发事件

时间:2014-05-09 05:40:06

标签: c# wpf xaml treeview

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

在我的xaml

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

在我的xaml.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
    }
}

此代码可以正常工作并按预期完成工作,但从其他人的角度看待不同的方法。

3 个答案:

答案 0 :(得分:2)

当你在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的真正美丽

答案 1 :(得分:1)

您可以使用IsKeyUp类的Keyboard方法检查是否已释放特定密钥。

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

答案 2 :(得分:1)

继承人我们如何处理它

    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();
        }
     }