EventTrigger 中的条件

2023-12-20

我可以检查事件触发器内的条件吗?我怎样才能只使用 XAML 来做类似的事情?

 <EventTrigger RoutedEvent="MouseDown">
    <Trigger Property="IsPressed" Value="true">
       <Setter Property = "Foreground" Value="Green"/>

按钮和菜单项具有适合您的 IsPressed 属性,但其他控件也适用。然而,使用一些附加行为添加 IsPressed 属性很容易。这将允许您像这样编写 XAML:

<TextBlock Text="Hello" TriggerTest:IsPressedBehavior.MonitorMouse="true">
    <TextBlock.Style>
        <Style TargetType="{x:Type TextBlock}"> 
            <Setter Property="Foreground" Value="Red" />
            <Style.Triggers> 
                <Trigger Property="TriggerTest:IsPressedBehavior.IsPressed" Value="True"> 
                    <Setter Property="Foreground" Value="Green" /> 
                </Trigger>
            </Style.Triggers> 
        </Style> 
    </TextBlock.Style>
</TextBlock>

附行为类:

using System;
using System.Windows;
using System.Windows.Input;

namespace TriggerTest
{
    public static class IsPressedBehavior
    {
        public static bool GetMonitorMouse(DependencyObject obj)
        {
            return (bool)obj.GetValue(MonitorMouseProperty);
        }

        public static void SetMonitorMouse(DependencyObject obj, bool value)
        {
            obj.SetValue(IsPressedProperty, value);
        }

        public static readonly DependencyProperty MonitorMouseProperty =
            DependencyProperty.RegisterAttached("MonitorMouse",
                                                typeof(bool),
                                                typeof(IsPressedBehavior),
                                                new UIPropertyMetadata(false, OnMonitorMouse));

        public static bool GetIsPressed(DependencyObject obj)
        {
            return (bool)obj.GetValue(IsPressedProperty);
        }

        public static void SetIsPressed(DependencyObject obj, bool value)
        {
            obj.SetValue(IsPressedProperty, value);
        }

        public static readonly DependencyProperty IsPressedProperty =
            DependencyProperty.RegisterAttached("IsPressed",
                                                typeof(bool),
                                                typeof(IsPressedBehavior),
                                                new UIPropertyMetadata(false));

        private static void OnMonitorMouse(DependencyObject depObj, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
        {
            UIElement uiElement = depObj as UIElement;
            if (uiElement == null)
            {
                return;
            }
            if ((bool)dependencyPropertyChangedEventArgs.NewValue)
            {
                uiElement.MouseDown += OnMouseDown;
                uiElement.MouseUp += OnMouseUp;
                uiElement.MouseLeave += OnMouseLeave;
                uiElement.MouseEnter += OnMouseEnter;
            }
            else
            {
                uiElement.MouseDown -= OnMouseDown;
                uiElement.MouseUp -= OnMouseUp;
                uiElement.MouseLeave -= OnMouseLeave;
                uiElement.MouseEnter -= OnMouseEnter;
            }
        }

        private static void OnMouseDown(object sender, MouseButtonEventArgs e)
        {
            SetIsPressed(sender as DependencyObject, true);
        }

        private static void OnMouseUp(object sender, MouseButtonEventArgs e)
        {
            SetIsPressed(sender as DependencyObject, false);
        }

        private static void OnMouseLeave(object sender, MouseEventArgs e)
        {
            SetIsPressed(sender as DependencyObject, false);
        }

        static void OnMouseEnter(object sender, MouseEventArgs e)
        {
            SetIsPressed(sender as DependencyObject, e.LeftButton == MouseButtonState.Pressed || e.MiddleButton == MouseButtonState.Pressed || e.RightButton == MouseButtonState.Pressed);
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EventTrigger 中的条件 的相关文章

  • 禁用触发 TextChanged 事件

    I have textbox我正在更改其中的文本lostFocus被解雇了 但这也激发了textChanged事件 我正在处理该事件 但我不希望在这种情况下触发它 我如何在这里禁用它 UPDATE 这个想法与bool很好 但我有几个文本框
  • WPF MVVM将DataTable绑定到DataGrid不显示数据

    我有一个简单的控件 其中包含一个 DataGrid 其中 ItemsSource 绑定到 DataTable 当我填充 DataTable 时 我可以看到 DataGrid 中添加了行 但没有显示任何数据 我没有为此 DataGrid 使用
  • App.Config 和 Web.Config 之间的区别?

    当在 wpf 中构建桌面应用程序时 您可以阅读问题文档并在人们的答案引用 web config 时安全地替换 app config 吗 如果是这样 您是否需要注意任何明显的陷阱 tnx 阅读文档 http msdn microsoft co
  • WPF:窗口设置边界

    我在 Windows Forms 中使用 SetBounds 方法而不是 Left Top Width Height 属性分配 因为每次我分配更改位置属性的值时 窗口都会更改其位置 Left Top Width Height 赋值导致窗口移
  • 专家 C#/.Net/WPF 开发人员应该了解哪些知识? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • WPF中ViewModel是否应该继承DependencyObject?

    我尝试创建一个简单的UserControl在 WPF 中使用 MVVM 现在我需要为UserControl 所以我尝试在中创建依赖属性UserControlViewModel 我不想处于代码隐藏状态 为了创建依赖属性UserControlV
  • wpf 的 prism 与 mvvm light

    我们正在启动一个带有 MVVM 的 WPF 项目 并且必须决定使用 PRISM 还是 MVVM Light 我对这两个框架都是新手 我已经阅读了一些帖子 但仍然有一些问题 有人可以阐明以下几个方面吗 两个框架 性能 无论出于何种原因 其中一
  • 如何在 WPF 应用程序中实现气球消息

    我们想使用气球消息 如UX Guide http msdn microsoft com en us library aa511451 aspx来自微软 我发现一些示例使用 Windows 窗体中的本机代码 但本机代码需要组件的句柄 这对于
  • SQL Server:触发器如何读取插入、更新、删除的值

    我在一张表中有触发器并且想阅读UserId插入 更新或删除行时的值 怎么做 下面的代码不起作用 我收到错误UPDATED ALTER TRIGGER dbo UpdateUserCreditsLeft ON dbo Order AFTER
  • WPF 中按钮的启用和禁用状态的不同图像

    我想根据按钮的状态更改下面代码中按钮的图像 即使用不同的图像来启用和禁用状态
  • 手动更新目标后,单向绑定停止工作

    我有这样的WPF绑定代码 TestModel source new TestModel TestModel target new TestModel Bind source target BindingMode OneWay source
  • 我的 WPF 应用程序中的 SaveFileDialog 异常

    我的一位客户在保存文件时遇到 WPF 应用程序崩溃的情况 我的保存文件代码是 var saveFileDialog new SaveFileDialog InitialDirectory string Concat Environment
  • 如何将绑定字符串格式设置到所有 DataGridTextColumn 控件?

    这是我的 DataGridTextColumn 控件之一 如下所示
  • 在Linux上编译C# + WPF以便在Windows上运行

    我有一个 C 应用程序 其中某些部分是使用 WPF 编写的 Mono 不支持 可以在 Linux 上编译这个应用程序吗 最终 该应用程序将在 Windows 上运行 但它是更大框架的一部分 并且我们的整个构建过程在 Linux 上运行 因此
  • 如何使用DocumentViewer显示流程文档?

    我的资源中有一个简单的流程文档 FlowDocument1 xaml
  • 有没有基于 WPF 的 Markdown 渲染器? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们有基于 WPF 的应用程序 我们有单独的字符串存储库 其中的文本在网络中进行编辑 在我们的 WPF
  • WPF 中处理系统关闭

    如何在 WPF 中重写 WndProc 当我的窗口关闭时 我尝试检查我正在使用的文件是否被修改 如果是 我必须提示用户 你想保存更改吗 消息 然后关闭正在使用的文件和窗口 但是 当我的窗口仍然打开时 我无法处理用户重新启动 关闭 注销的情况
  • 将 MahApps 图标与 ContextMenu 结合使用

    我正在使用 MahApps Metro UI 工具包编写 WPF 应用程序 http mahapps com guides quick start html http mahapps com guides quick start html
  • 在包含按钮的ListView中,如何获取单击按钮的索引?

    我有一个ListView仅包含按钮 我想做的很简单 我想要获得已单击按钮的索引 列表的计数从0到100不等 因此当用户单击按钮6时 我需要这个数字进行处理 我定义了我的ListView像这样
  • 是否可以将新表和旧表从触发器传递到 MySQL 中的过程中?

    是否可以将新表和旧表从触发器传递到 MySQL 中的过程中 我怀疑不会 因为没有过程接受的表这样的数据类型 有什么可能的解决方法吗 理想情况下它看起来像这样 CREATE TRIGGER Product log AFTER UPDATE O

随机推荐

  • 更新行而不是创建新条目数据库android

    我一直在研究 Android 食谱书中的食谱 以利用数据库来存储事件 当前代码允许我添加新条目 但无法修改任何添加的条目 我需要的是一个具有预定义行数 48 的数据库 并且具有通过相应的编辑文本字段更新这些行的功能 任何人都可以帮我修改以下
  • Karma 和 React,有导致错误的警告

    我在用Karma http karma runner github io 0 8 index html with mocha http mochajs org 测试我的React https facebook github io react
  • .NET 日期时间到 SqlDateTime 转换

    在将 NET DateTime 默认情况下 DateTime 转换为 SqlDateTime 时 我应该始终检查 NET 日期是否在 SqlDateTime MinValue 和 SqlDateTime MaxValue 之间 或者 有没有
  • Ruby rspec 命令不起作用,可能是因为 Ubuntu 12 是 64 位吗?

    我在这个问题上曾经很头疼过 我目前正在做一项作业 要求我在 ruby 上使用 rspec 每当我运行 rspec 命令时 我都会收到类似错误 home rvm gems ruby 1 9 3 p286 gems rspec core 2 1
  • 如何替换 MySQL 中的正则表达式模式

    我有一张桌子叫myTable其中有一个名为col1 此列包含以下格式的数据 1 或 2 位数字 连字符 8 位数字 我想替换此列中的所有数据 并将连字符之前的所有内容替换为 4 所以这是一个示例 old values New Values
  • 在 64 位机器上很长[重复]

    这个问题在这里已经有答案了 64位机器上是long 128位吗 Edit 重复问题 看x64 上的 sizeof int https stackoverflow com questions 651956 sizeofint on x64 在
  • 在 bash 脚本中插入包含“$”的变量

    我正在编写一个创建用户帐户的 bash 脚本 用户名和密码哈希值是根据特定标准从文件中提取的 密码哈希自然包含分隔哈希字段的 例如 1 SALT 问题是 p 选项useradd需要用单引号将密码哈希括起来 以防止 字段作为变量进行插值 传递
  • 如何更改 Flutter Web 中的 chrome 标题颜色?

    顶部带有链接 URL 的标题的默认颜色是蓝色 有人知道如何更改它的颜色吗 将此元标记放在index html 文件中的 head 标记之间 它将更改您的移动浏览器的顶部菜单颜色
  • LeafletJS 标记随缩放而移动

    使用 LeafletJS 这是王牌 到目前为止 P 我们没有 JSON 对象或任何东西 所以我从 HTML 中取出值 标题 latlng 并创建标记 一般来说 这可以正常工作 但是它们的绘图存在问题 当地图真正放大时 它们似乎还不错 但当您
  • jquery:我怎么知道我是否拥有它?

    我需要 jquery 在本地浏览器上工作 我如何知道它是否已安装以及如何安装 我的问题是特定于能够运行此代码 onmouseover evt target setAttribute opacity 0 5 someDiv show onmo
  • 具有多个 https 站点的 HAproxy

    我们有几个在负载均衡器后面运行的 http 站点 使用hearbeat 具有故障转移功能 和一个 https 站点 一切都运行良好 但现在我想要 添加另一个 https 站点 我找不到任何托管多个 https 站点的参考资料 有人使用 HA
  • 在 pySpark 中使用 paramGrid 从 CrossValidator 中提取结果

    我用 pySpark 训练随机森林 我想要一个包含网格中每个点的结果的 csv 我的代码是 estimator RandomForestRegressor evaluator RegressionEvaluator paramGrid Pa
  • 了解 openmp 中的折叠子句

    我遇到了一个包含崩溃子句的 OpenMP 代码 这对我来说是新的 我试图理解它的含义 但我认为我还没有完全理解它的含义 我发现的一个定义是 COLLAPSE https computing llnl gov tutorials openMP
  • JavaScript document.domain 未捕获 DOMException:阻止了具有原点的框架

    当我测试 SOP 时 我遇到了这种情况 两个文档与我预期的同一域有关系 当我尝试获取位置时 它会抛出错误 要重现该问题 Open https www google com https www google com 从控制台let opene
  • 为什么 '\x' 在 Python 中无效?

    我正在尝试使用 字符 使用 a b c 只是为了自己枚举Python将哪些字符解释为控制字符以及解释为什么 这是我发现的 a BELL b BACKSPACE f FORMFEED n LINEFEED r RETURN t TAB v V
  • Visual Studio 代码组织导入功能

    在 Visual Studio Code 1 23 版本中 添加了 组织导入 功能 这是一个非常有用的功能 因为它本身可以处理导入 但我希望能够对其进行配置 我想知道此功能是否可用的功能有 是否可以配置导入的排序顺序 我想在本地导入之前配置
  • Log4Net 不记录或出错

    我一直在尝试在我的 ASP NET Web 应用程序中获取 log4net 日志记录 但没有成功或任何明显的错误 我尝试使用具有以下配置的 ADONetAppender 附加程序
  • OSError:[Errno 24]打开的文件太多 - OS Mojave

    因此 我正在编写一个脚本来获取某个数据集 使用不同的随机种子对其进行 100 次采样 完成所有这些数据集 然后获取平均误差 但是 每当我尝试运行该脚本时 都会出现错误 OSError Errno 24 Too much open files
  • Drupal 通过代码在投票 API 中创建投票

    我正在编写一个自定义模块 我希望它做的部分工作是创建与节点关联的投票 我试图弄清楚如何从我的模块调用投票 API 我查看了文档 但它有点稀疏 这是我不久前编写的模块中的一个示例 while data db fetch object resu
  • EventTrigger 中的条件

    我可以检查事件触发器内的条件吗 我怎样才能只使用 XAML 来做类似的事情