gpt4 book ai didi

wpf - 如何仅通过在WPF中单击来获取选定的TreeViewItem?

转载 作者:行者123 更新时间:2023-12-03 10:16:19 24 4
gpt4 key购买 nike

我已经花了很长时间寻找一个简单而直接的答案,但是到目前为止还是失败了。我发现混合答案对我有帮助,但是所有答案都会为真正非常简单的内容生成大量代码:

如何在WPF树 View 中单击以获取所选项目?

我已经知道如何获取所选项目或如何通过右键单击来选择项目,或者如何通过键来延迟项目选择(在此处找到所有答案),但是我只想知道用户何时单击该项目。这是必需的,因为我有一个treeView,用户可以在其中使用箭头键进行导航(这将更改de IsSelected),但是当单击项目或按Return键时,我只需要执行一些逻辑即可。

我很喜欢纯MVVM解决方案。如果那不可能,那么我在这里非常绝望,所以任何不可怕的事情都会有所帮助。

最佳答案

好吧,例如,如果您将MouseDown视为“点击”,则可以执行以下操作:

xaml:

<ListBox x:Name="testListBox">
<ListBoxItem Content="A" />
<ListBoxItem Content="B" />
<ListBoxItem Content="C" />
</ListBox>

代码隐藏:
testListBox.AddHandler(MouseDownEvent, new MouseButtonEventHandler((sender, args) => ItemClicked()), true);
testListBox.AddHandler(
KeyDownEvent,
new KeyEventHandler(
(sender, args) => {
if (args.Key == Key.Enter)
ItemClicked();
}),
true);

private void ItemClicked() {
MessageBox.Show(testListBox.SelectedIndex.ToString());
}

这样,仅当在 MessageBox上按下鼠标或按下Enter键时,才会调用 ListBoxItem。箭头键更改选择时不可以。 SelectedIndex将在显示的 MessageBox上保留正确的索引。

更新:

使用行为的MVVM方法:
public class ItemClickBehavior : Behavior<ListBox> {
public static readonly DependencyProperty ClickedIndexProperty =
DependencyProperty.Register(
"ClickedIndex",
typeof(int),
typeof(ItemClickBehavior),
new FrameworkPropertyMetadata(-1));

public int ClickedIndex {
get {
return (int)GetValue(ClickedIndexProperty);
}
set {
SetValue(ClickedIndexProperty, value);
}
}

protected override void OnAttached() {
AssociatedObject.AddHandler(
UIElement.MouseDownEvent, new MouseButtonEventHandler((sender, args) => ItemClicked()), true);
AssociatedObject.AddHandler(
UIElement.KeyDownEvent,
new KeyEventHandler(
(sender, args) => {
if (args.Key == Key.Enter)
ItemClicked();
}),
true);
}

private void ItemClicked() {
ClickedIndex = AssociatedObject.SelectedIndex;
}
}

xaml:
<ListBox>
<i:Interaction.Behaviors>
<local:ItemClickBehavior ClickedIndex="{Binding VMClickedIndex, Mode=TwoWay}" />
</i:Interaction.Behaviors>
<ListBoxItem Content="A" />
<ListBoxItem Content="B" />
<ListBoxItem Content="C" />
</ListBox>

现在,属性 VMClickedIndex将具有列表框的索引,该列表框在

关于wpf - 如何仅通过在WPF中单击来获取选定的TreeViewItem?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16398543/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com