当“进入”时,如何在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
}
}
这段代码工作并按预期完成工作,但从其他人的角度来看有些不同。
当你用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();
}
}