我试图找到一种优雅的方式,如何在键盘上按下“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
}
}
此代码可以正常工作并按预期完成工作,但从其他人的角度看待不同的方法。
答案 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)
答案 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();
}
}