gpt4 book ai didi

wpf - ListBoxItem 子项 (WPF) 中的鼠标交互

转载 作者:行者123 更新时间:2023-12-04 21:35:38 26 4
gpt4 key购买 nike

我有一个带有 ItemTemplate 的 ListBox,其中包含一个与鼠标交互的控件。这会干扰 ListBox 的选择功能,即单击控件不会选择该项目。这是因为 ListBoxItem 在 OnMouseLeftButtonDown 中将鼠标事件的 Handled 属性设置为 true。我尝试了以下

protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) {
base.OnMouseLeftButtonDown(e);
e.Handled = false;
}

但是 ListBoxItem “接管”了鼠标并阻止控件进行自己的交互。然后我有了另一个想法
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) {
base.OnMouseLeftButtonDown(e);
((ListBoxItem)VisualTreeHelper.GetParent(VisualTreeHelper.GetParent(VisualTreeHelper.GetParent(this)))).IsSelected = true;
}

这实际上有效,但感觉更像是一个丑陋的杂物而不是一个优雅的解决方案。有没有更好的解决方案不依赖于可视化树的确切内容?

最佳答案

我找到了一种不那么麻烦的方法:

protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) {
base.OnMouseLeftButtonDown(e);
Selector.SetIsSelected(this, true);
}

为此,ListBox 的 ItemTemplate 中的控件需要以下 XAML 属性:
Selector.IsSelected="{Binding IsSelected, Mode=OneWayToSource, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}"

它提出了两个新问题:
  • 定义我自己的依赖属性而不是查找当前未使用的附加属性会更好吗?
  • 有没有办法只在标记中实现类似的东西?
  • 关于wpf - ListBoxItem 子项 (WPF) 中的鼠标交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2893332/

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