WPF 从 DataTrigger 调用方法

2024-03-03

是否可以使用通配符或调用方法来确定是否应应用 DataTrigger?

我目前将 DataList 绑定到包含文件名的 IEnumerable,并且如果文件扩展名以“old”开头,我希望文件名显示为灰色

我的非工作梦想 xaml 标记看起来像这样:

<DataTemplate.Triggers>
    <DataTrigger Binding="{Binding}" Value="*.old*">
        <Setter TargetName="FileName" Property="Foreground" Value="Gray"/>
    </DataTrigger>
</DataTemplate.Triggers>

我能想到的唯一可行的解​​决方案是插入一个包含此逻辑的新视图模型属性,但我希望尽可能避免更改视图模型。


这两个问题的答案都是肯定的......以一种迂回的方式

如果您使用绑定转换器,您可以向它传递一个参数并让它返回一个布尔值,这将是执行您所描述的操作的有效方法。

<DataTemplate.Triggers>
    <DataTrigger Binding="{Binding Path=., Converter={StaticResource myFileExtensionConverter}, ConverterParameter=old}" Value="True">
        <Setter TargetName="FileName" Property="Foreground" Value="Gray"/>
    </DataTrigger>
</DataTemplate.Triggers>

转换器看起来像这样

  public class MyFileExtensionConverter : IValueConverter {  
      public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
         Boolean returnValue = false;  

         String fileExtension = parameter as String;
         String fileName = value as String;

         if (String.IsNullOrEmpty(fileName)) { }
         else if (String.IsNullOrEmpty(fileExtension)) { }
         else if (String.Compare(Path.GetExtension(fileName), fileExtension, StringComparison.OrdinalIgnoreCase) == 0) {
            returnValue = true;
         }
         return returnValue;
      }

      public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
         return value;
      }
   }

基本上,当文件扩展名匹配时,您会得到一个“true”,这将触发触发器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF 从 DataTrigger 调用方法 的相关文章

  • QCombobox 向下箭头图像

    如何更改Qcombobox向下箭头图像 现在我正在使用这个 QSS 代码 但这不起作用 我无法删除向下箭头边框 QComboBox border 0px QComboBox down arrow border 0px background
  • 平滑滚动.net 表单

    您好 我正在 net 中使用表单 并且在运行时动态添加大量链接标签 我将这些链接标签添加到面板并将该面板添加到 winform 当链接标签的数量增加时 表单会显示一个自动滚动条 垂直 现在 当我使用自动滚动向下滚动时 表单在滚动时不会更新其
  • 在 Xamarin 中隐藏软键盘

    如何隐藏软键盘以便在聚焦时显示Entry在 Xamarin forms 便携式表单项目中 我假设我们必须为此编写特定于平台的渲染器 但以下内容不起作用 我创建自己的条目子类 public class MyExtendedEntry Entr
  • EF Core 通过完全替换断开集合导航属性的更新

    使用 EF Core 5 0 我有一个 SPA 页面 可以加载Group实体及其集合Employee来自 API 的实体 var groupToUpdate await context Groups Include g gt g Emplo
  • 信号处理程序有单独的堆栈吗?

    信号处理程序是否有单独的堆栈 就像每个线程都有单独的堆栈一样 这是在 Linux C 环境中 来自 Linux 手册页signal 7 http kernel org doc man pages online pages man7 sign
  • 如何在 SqlDataReader.Read() 期间从死锁异常中恢复

    我的 NET 应用程序的事件日志显示 它在从 Sql Server 读取数据时偶尔会出现死锁 这种情况通常非常罕见 因为我们已经优化了查询以避免死锁 但有时仍然会发生 过去 我们在调用ExecuteReader函数在我们的SqlComman
  • GCC 和 ld 找不到导出的符号...但它们在那里

    我有一个 C 库和一个 C 应用程序 尝试使用从该库导出的函数和类 该库构建良好 应用程序可以编译 但无法链接 我得到的错误遵循以下形式 app source file cpp text 0x2fdb 对 lib namespace Get
  • 找不到 assimp-vc140-mt.dll ASSIMP

    我已经从以下位置下载了 Assimp 项目http assimp sourceforge net main downloads html http assimp sourceforge net main downloads html Ass
  • 如何在 C# 控制台应用程序中将修饰符(ctrl、alt、shift)按键捕获为单个按键?

    Console ReadKey 仅在按下 正常 键时捕获输入 然后将修饰符 如果有 附加为键信息的一部分 如何将单个修饰键注册为输入 提供了一种解决方案这个链接 https blogs msdn microsoft com toub 200
  • 动态生成的控件 ID 返回为 NULL

    我可以在 Page PreInit 函数中创建动态控件 如何检索控件及其 ID 我的 C 代码用于创建动态控件之一 var btn new WebForms Button btn Text btn ID Addmore btn Click
  • C# 构建一个 webservice 方法,它接受 POST 方法,如 HttpWebRequest 方法

    我需要一个接受 POST 方法的 Web 服务 访问我的服务器正在使用 POST 方法 它向我发送了一个 xml 我应该用一些 xml 进行响应 另一方面 当我访问他时 我已经使用 HttpWebRequest 类进行了管理 并且工作正常
  • 如何在服务器端按钮点击时关闭当前标签页?

    我尝试在确认后关闭当前选项卡 因此我将以下代码放在确认按钮的末尾 但选项卡没有关闭 string jScript ClientScript RegisterClientScriptBlock this GetType keyClientBl
  • C++ php 和静态库

    我创建了一个library a 其中包含 cpp 和 h 文件 其中包含很多类 嵌套类和方法 我想在 php 示例中包含这个静态库并尝试使用它 我想提一下 我是 php 新手 我已经在 test cpp 文件中测试了我的 libray a
  • 将二进制数据从 C# 上传到 PHP

    我想将文件从 Windows C 应用程序上传到运行 PHP 的 Web 服务器 我知道 WebClient UploadFile 方法 但我希望能够分块上传文件 以便我可以监控进度并能够暂停 恢复 因此 我正在读取文件的一部分并使用 We
  • 在 EnvDTE 中调试时捕获 VS 局部变量

    是否可以使用 EnvDTE 进行 vsix Visual Studio 扩展来捕获本地和调试窗口使用的调试数据 或者可以通过其他方法吗 我想创建一个自定义的本地窗口 我们可以修改它以根据需要显示一些较重的内容 而无需为高级用户牺牲原始的本地
  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • 使用taskkill停止Windows服务

    我需要帮助来使用 C 终止 Windows 服务 现在要终止该服务 请使用以下选项 从命令 sc queryex ServiceName 发现后PID服务的 taskkill pid 1234 exemple f 为了便于阅读 但如果您明白
  • 在简单注入器中解析具有自定义参数的类

    我正在使用以下命令创建 WPF MVVM 应用程序简易注射器作为 DI 容器 现在 当我尝试从简单注入器解析视图时遇到一些问题 因为我需要在构造时将参数传递到构造函数中 而不是在将视图注册到容器时 因此这不是适用的 简单注入器将值传递到构造
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte
  • 使用 QtWebEngine 将 C++ 对象暴露给 Qt 中的 Javascript

    使用 QtWebkit 可以通过以下方式将 C 对象公开给 JavascriptQWebFrame addToJavaScriptWindowObject如中所述https stackoverflow com a 20685002 5959

随机推荐

  • Scala:检查对象是否为数字

    模式匹配是否可以检测某物是否是Numeric 我想做以下事情 class DoubleWrapper value Double override def equals o Any Boolean o match case o Numeric
  • Scala 中 :: 和 ::: 有什么区别

    val list1 List 1 2 val list2 List 3 4 then list1 list2 returns List Any List List 1 2 3 4 list1 list2 returns List Int L
  • 打印 python 列表,逗号后不带引号或空格[重复]

    这个问题在这里已经有答案了 现在我有一个文件名列表 我想打印它们 逗号后不带空格 也不带引号 所以基本上我有一个具有以下输出的文件 1 2 3 我希望输出是 1 2 3 Use the join method gt gt gt your l
  • 滚动侦听器 - 向下滚动的第一个 distanceY 始终为负?

    我有一个 GestureDetector OnGestureListener 连接到 ListView 我试图在用户向下滚动时监听滚动事件 private GestureDetector OnGestureListener mOnGestu
  • 无法从 Crashlytics 找到 UUID 的 dsym 文件

    请帮助我找到 Crashlytics 提示给定 UUID 缺少 dSYM 的问题 我已搜索了所有 dSYM 文件 但未找到给定的 UUID 我用过这个命令 mdfind com apple xcode dsym uuids lt gt 从
  • dplyr 对向量而不是 R 中的数据帧进行过滤

    这似乎是一个简单的问题 但我还没有找到一个干净的解决方案 我在 R 中有一个向量 我想从向量中删除某些元素 但是出于多种原因我想避免使用向量 向量 thiselement 表示法 特别是 这就是我正在尝试做的事情 this doesnt w
  • 主干视图的窗口调整大小事件

    我在 javascript 中使用 Backbone 视图 我创建了一个主干视图 如下所示 var MaskView Backbone View extend className dropdown mask initialize funct
  • 保留/切片 pandas 中的特定列

    我知道这些列切片方法 df2 df col1 col2 col3 and df2 df ix 0 2 但我想知道是否有一种方法可以在同一切片中从数据帧的前 中 尾对列进行切片 而无需具体列出每个列 例如 一个数据框df包含列 col1 co
  • 离开范围时 Swift 在 CFRelease 中崩溃

    我刚刚投入 iOS 开发 目前在 queryServer 函数末尾的 CFRelease 函数中遇到运行时错误 我在突出显示的行上添加了注释 但没有错误如果我注释掉对 extractIPFromQuery 的函数调用 下面的代码获取服务器的
  • simple_form 和引导程序验证不起作用

    我想设置一个 创建帐户 页面 我使用的宝石是 导轨 3 2 3 简单形式 2 0 1 全方位身份验证 twitter bootstrap rails 2 0 6 蒙戈伊德 2 2 3 表格如下所示 simple form for ident
  • 在 Jenkinsfile 中运行映像时如何传递 docker 容器参数

    我有一个以以下结尾的 Dockerfile ENTRYPOINT node index js CMD help The index js可以采用几个不同的参数 我还需要公开容器的端口 因此如果我手动运行它 我会执行以下操作 docker r
  • 组在 RabbitMQ 中接收消息,最好使用 Spring AMQP?

    我正在从服务 S 接收消息 该服务将每个单独的属性更改作为单独的消息发布到实体 一个人为的例子是这样的实体 Person id 123 name Something address 如果姓名和地址在同一交易中更新 则 S 将发布两条消息 P
  • 如何获取iframe的scrollTop

    当window是iframe时 jQuery的scrollTop返回null 有谁能弄清楚如何获取 iframe 的scrollTop 吗 更多信息 我的脚本在 iframe 本身中运行 父窗口位于另一个域中 因此我无法访问 iframe
  • 将多个/不同的 MongoTemplate 与相同的 Repository 类一起使用

    我有三个不同的 mongo 数据库 相同架构 的集合 所以我为此创建了一个存储库 但是我是否可以使用不同的 mongoTemplates 一个用于三个不同的数据库 但使用相同的存储库类 我可以创建三个不同的存储库类 每个数据库一个 但我不想
  • 批处理模式下 Kafka headers 作为列表

    我试图在以批处理模式消费消息的同时访问一些标头 如果我设置监听器来处理Message data Acknowledgment ack throws SQLException for int i 0 i lt data size Object
  • React - 错误:尝试运行 npm start 时找不到模块 React

    我在尝试为 React 应用程序运行 npm start 时遇到了一个错误 我的应用程序在开发过程中基本上按照我的预期运行 但是我遇到了一个错误 需要我更新我的节点版本作为潜在的修复 我将 node 更新到 v16 13 2 并且还决定将
  • JQuery 自动完成。如果找不到项目,显示“按 Enter 键插入自动完成”?

    我正在做一种标签自动完成组合 因此 基本上 当用户输入没有自动完成选项的查询 即 aaa 时 我希望自动完成下拉并显示 按 Enter 为 aaa 创建标签 我在文档中找不到任何内容 我想这需要我进行一些黑客攻击 但在这样做之前 我想看看是
  • C# 相当于 Java 的 Exception.printStackTrace()?

    C 是否有与 Java 等效的方法Exception printStackTrace 或者我必须自己写一些东西 通过 InnerExceptions 来解决 尝试这个 Console WriteLine ex ToString From h
  • css api 的 jquery if else 条件

    我有下面的 jquery 语句 this span section1 css background url images accordion closed left png no repeat scroll 0 0 transparent
  • WPF 从 DataTrigger 调用方法

    是否可以使用通配符或调用方法来确定是否应应用 DataTrigger 我目前将 DataList 绑定到包含文件名的 IEnumerable 并且如果文件扩展名以 old 开头 我希望文件名显示为灰色 我的非工作梦想 xaml 标记看起来像