【问题标题】:How to disable WPF Expander Control isPressed/onMouseClick event?如何禁用 WPF Expander Control isPressed/onMouseClick 事件?
【发布时间】:2020-06-11 14:19:53
【问题描述】:

我有一个带有扩展器控件的 WPF 应用程序。我希望扩展器控件仅基于 IsMouseOver 事件进行扩展。我能够通过在 ControlTemplate.Triggers 中实现相应的触发器来启用 IsMouseOver 行为。但我不知道如何禁用 IsPressed/OnMouseClick 事件。非常感谢任何有关如何做的建议。谢谢。

【问题讨论】:

  • 能否分享您的自定义ControlTemplate

标签: wpf expander


【解决方案1】:

您可以为默认模板中称为“HeaderSite”的ToggleButton 处理PreviewMouseLeftButtonDown 事件:

private void HeaderSite_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    => e.Handled = true;

XAML:

<ToggleButton x:Name="HeaderSite" PreviewMouseLeftButtonDown="HeaderSite_PreviewMouseLeftButtonDown" ContentTemplate="{TemplateBinding HeaderTemplate}" ... />

请记住,XAML 是一种标记语言,您应该在诸如 C# 之类的编程语言中实现这种行为。

如果您的模板在ResourceDictionary 中定义,您应该在其中添加code-behind class 并在那里定义事件处理程序。

【讨论】:

  • 谢谢mm8。你的回答完全有道理。当我输入代码时,我收到错误消息:CS1061 'App' 不包含 'HeaderSite_PreviewMouseLeftButtonDown' 的定义,并且找不到接受类型为 'App' 的第一个参数的可访问扩展方法 'HeaderSite_PreviewMouseLeftButtonDown'(您是否缺少使用指令还是程序集引用?)。我认为这与您的第二条评论有关。我的 XAML Expander 样式定义在 App.xaml 中。我需要在哪里添加什么代码来解决错误?
  • @scorpiotomse:你把事件处理程序放在哪里了?它的样式在App.xaml 中定义,代码在App.xaml.cs 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-13
  • 1970-01-01
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-31
相关资源
最近更新 更多