基于 DataContext 属性的触发器

2023-12-24

假设我想根据 DataContext 中的属性值显示/隐藏元素,如何实现?

// In MainWindow.xaml.cs: DataContext of MainWindow.xaml
public int Mode { get; set; } 

在 XAML 中,我想根据以下内容显示隐藏元素Mode。我怎样才能使下面的工作?或者实现这个的适当方法是什么?

<StackPanel>
    <StackPanel.Triggers>
        <Trigger Property="Mode" Value="1">
            <Setter TargetName="txt1" Property="Visibility" Value="Visible" />
            <Setter TargetName="txt2" Property="Visibility" Value="Collapsed" />
            <Setter TargetName="txt3" Property="Visibility" Value="Visible" />
        </Trigger>
        <Trigger Property="Mode" Value="2">
            <Setter TargetName="txt1" Property="Visibility" Value="Collapsed" />
            <Setter TargetName="txt2" Property="Visibility" Value="Visible" />
            <Setter TargetName="txt3" Property="Visibility" Value="Collapsed" />
        </Trigger>
    </StackPanel.Triggers>
    <TextBlock Text="TextBlock 1" x:Name="txt1" />
    <TextBlock Text="TextBlock 2" x:Name="txt2" />
    <TextBlock Text="TextBlock 3" x:Name="txt3" />
</StackPanel>

目前,我收到的错误是“在“StackPanel”类型中找不到属性“Mode”。 D:\tmp\WpfApplication1\TriggersAndProperties\MainWindow.xaml"


你需要使用DataTriggers如果您想要可以在绑定上工作的触发器。问题是,DataTriggers仅适用于样式和模板,因此您需要像这样定义一个:

<StackPanel>
  <StackPanel.Style>
    <Style TargetType="{x:Type StackPanel}">
      <Style.Triggers>
        <DataTrigger Binding="{Binding Path=Mode}" Value="1">
          <Setter TargetName="txt1" Property="Visibility" Value="Visible" />
          <Setter TargetName="txt2" Property="Visibility" Value="Collapsed" />
          <Setter TargetName="txt3" Property="Visibility" Value="Visible" />
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=Mode}" Value="2">
          <Setter TargetName="txt1" Property="Visibility" Value="Collapsed" />
          <Setter TargetName="txt2" Property="Visibility" Value="Visible" />
          <Setter TargetName="txt3" Property="Visibility" Value="Collapsed" />
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </StackPanel.Style>
  <TextBlock Text="TextBlock 1" x:Name="txt1" />
  <TextBlock Text="TextBlock 2" x:Name="txt2" />
  <TextBlock Text="TextBlock 3" x:Name="txt3" />
</StackPanel>

另一种解决方案是使用IValueConverter将 int 转换为Mode to the Visibility你想要的,并将其直接应用到每个文本块Visibility财产。

请注意,Dean Chalk 的答案仍然有效:您必须使用DependencyProperty或实施INotifyPropertyChanged如果你想改变Mode引起。

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

基于 DataContext 属性的触发器 的相关文章

  • WPF 列表框不会垂直滚动

    在 Groupbox 中 我有一个 Listbox ListboxItems 也在 XAML 中定义 列表框定义为
  • WPF DataGrid 的 Items 和 ItemsSource 属性之间有什么区别?

    从我从 Intellisense 收集到的信息来看 区别在于返回类型 并且 ItemsSource 有一个 setter 而 Items 只有一个 getter 但实际上 我不明白这两个属性需要彼此分开 而不仅仅是作为一个属性 有人可以向我
  • 如何从 Access 数据库中读取“是/否”值作为布尔值?

    帮我找回YES NO来自 MS Access 的布尔格式数据类型 我尝试解析它 但它总是返回 false 更新 实际上不是问题抱歉 它确实接受 YES NO 作为布尔值 OleDbconnection dbConnect new OleDb
  • 如何让 DataTemplate.DataTrigger 检查大于或小于?

    下列DataTemplate DataTrigger如果是 则使年龄显示为红色equal to 30 如果是的话 如何使年龄显示为红色比 更棒 30
  • 全屏模式下的 XBAP

    我想以全屏模式运行 XBAP 有没有办法让IE全屏打开XBAP 由于我以完全信任的方式运行 每当用户单击全屏按钮时 我都会使用 Process Start 方法以 kiosk 模式打开 IE 以下代码解决了我的问题 Process Star
  • 阻止用户取消选择列表框中的项目?

    我有一个列表框 里面有很多项目 用户可以单击某个项目来编辑其内容 如何防止用户取消选择所有项目 即 用户不应该无法选择任何内容 您的情况缺少一个案例 即清除列表后 您将选择列表中不再存在的项目 我通过添加额外的检查来解决这个问题 var l
  • F# 中的自定义路由事件

    我正在尝试翻译这段 C 代码 https msdn microsoft com en us library ms752288 aspx 到目前为止我的尝试 type MyButtonSimple as self inherit Button
  • 如何将外部程序集的类型添加到工具箱控件? (WPF)

    我正在尝试在我的 WPF 应用程序中执行类似的操作 ToolboxControl ctrl new ToolboxControl Assembly assembly Assembly LoadFile file var category n
  • wpf 控件宽度绑定

    我有两个带有内容的边框 第二个边框宽度根据情况而变化 在内容上 我试图将第一个边框绑定到第二个边框宽度 但是 它不起作用 我不确定我错过了什么 有人可以给我一些指导吗 下面是我目前正在尝试的示例
  • 如何从 WPF 应用程序访问 Windows 文件预览图标

    我在一个目录中有一堆图片和视频 需要在WPF应用程序中显示 我正在考虑将Win7大图标本身显示为预览图像 因为这将节省我从视频文件中抓取适当帧的工作 因为 Windows 已经很好地完成了这项工作 有任何代码片段可以访问此 Shell 图标
  • WPF Datagrid 组扩展文本 - 如何绑定?

    我正在使用带有组合框的数据网格 该组合框应该更改分组字段 我使用以下 xaml 来定义常规分组模板
  • 在WPF中如何添加菜单项事件?

    在我的 WPF 应用程序中 我添加一个菜单 然后在其下添加几个菜单项 例如 我的菜单项之一是 Main Item 然后我在 Main Item 下添加subItem1 subItem2和subItem3 我想单击 subItem1 并执行某
  • 将 MouseBindings 添加到数据绑定 WPF ListView 中的项目

    我试图在用户单击 ListView 中的项目时执行 ViewModel 中的命令 当我添加一个ListViewItem在 XAML 中我可以添加一个MouseBinding to its InputBindings
  • 在 Composite WPF (Prism) 中,我应该如何对我的控制器进行单元测试?

    我正在使用一个模块构建一个基本的复合 WPF Shell 我想对我的模块进行单元测试 显然 Composite WPF 以一种易于单元测试的方式模块化我的代码 下面是我想要进行单元测试的代码 它驻留在我的模块的控制器中 请注意标准复合 WP
  • OpenGL:顶点越多,性能越慢

    我正在开发一个程序的一部分 其中给定 xyz 坐标集合 制作 3D 模型 我已经完成了这张图片所需的所有功能 即平移 旋转 缩放 但是给出的 xyz 坐标越多 程序运行速度就越慢 我的程序在处理 29 000 个坐标时运行得非常流畅 但当我
  • 无法在 WPF 中使用 MVVM 在设计时进行数据绑定 - ViewModel 属性永远不会被调用

    好吧 我正在为此烦恼 所以任何帮助将不胜感激 我正在使用 MVVM 模式构建 WPF 应用程序 为了在设计时获取数据 我将 Ninject 依赖注入框架与服务定位器结合使用 很像文章中的示例 http jonas follesoe no Y
  • 级联删除时触发调用

    我在 MySQL 中有表 A 它有一些对其他表 B C D 的级联删除的引用 当从 A 中删除某些内容时 我需要使用触发器 当我直接从 A 删除记录时 此触发器起作用 但它不适用于级联删除 是否存在任何版本的 MySQL 可以让我的触发器与
  • 如何将 WPF 3.0 下构建的应用程序转换为 4.5 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我在 WPF 3 0 中构建了一个应
  • 当事件button.click发生时,如何获取按钮名称/标签?

    我以编程方式制作按钮并将它们添加到堆栈面板中 以便每次用户导航到页面时按钮都会发生变化 我正在尝试做这样的事情 当我单击创建的按钮时 它将获取按钮的标签并转到正确的页面 但是 我无法使用 RoutedEventHandler 访问按钮元素
  • 带有移动向前/向后按钮的自定义列表框

    我有一个带有左 右重复按钮的自定义列表框 可以使用内容模板滚动其内容 如下所示

随机推荐

  • Event.keyCode 不适用于“输入时” - 未定义

    目前我正在开发一个项目的功能 并且 event keyCode 似乎不适用于 输入时 触发器 我正在使用 Google Chrome 31 和 jQuery 1 10 2 这是我在方法中尝试的内容 input on input functi
  • 清除 propel 缓存(实例池)

    我需要使用 propel 在一次 php 执行中强制从数据库重新读取数据 我已经有一个有点 hacky 的解决方案 为相应的类调用 init modelName 但想要更好的东西 是否有任何单一调用或服务配置选项 就像杀死整个实例池一样 关
  • Python 和蓝牙/OBEX [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何 Python 库可以让我使用 OBEX 对象交换 发送 文件并且可以跨平台 Windows
  • xampp phpmyadmin 访问被拒绝错误(#2002)

    大家好 我在 3306 上运行 mysql 服务器 我完全卸载了它并安装了 XAMPP 一开始Mysql没有运行 然后我在my ini中将端口更改为3307以及CP的配置 它显示状态为正在运行 但 phpmyadmin 给出错误 因为访问被
  • SwiftUI中如何制作摇晃效果?

    我想制作带有偏移的抖动效果 希望在开始时具有零偏移并在 30 0 n 30 0 之间抖动 覆盖此偏移 30 0 0 0 30 0 但在编码中我不能有这 3 个选项 而我有 2 个选项 我的目标是从 0 0 开始 到 30 0 然后到 30
  • 将数据从 Firebase 数据库中的一个节点移动或复制到另一个节点

    我正在尝试将一个节点上的数据 即 cart details UID 移动到另一个节点orders UID order1 我尝试了不同的方法 但似乎都有点令人困惑 是否有任何内置功能或方法可以使工作变得更容易 任何帮助表示赞赏 我已附上相同的
  • 如何删除文本文件的第一行?

    我一直在网上搜索 但没有找到任何好的解决方案 这是我的文本文件 54 95 45 97 51 84 0 32 55 14 50 54 68 3 57 88 1 24 28 38 37 9 44 14 84 40 92 86 94 95 62
  • 将 PDF 作为页面的一部分查看

    我正在尝试在 MVC 网页中查看 PDF 文档 但无法使其工作 我希望 PDF 显示为页面上其他内容 页眉 页脚等 的一部分 目前我有一个解决方案 可以在整个页面上显示 PDF 有人这样做过吗 如果是的话怎么办 你为什么不尝试像这样使用 i
  • 初始目录不适用于 CFileDialog

    我正在使用 CFileDialog 我已经设置了如下所示的初始路径 如代码所示 它不起作用 如果我犯了错误 请纠正我 CFileDialog filedlg new CFileDialog TRUE LPCTSTR NULL LPCTSTR
  • 使用 jQuery 更新现有 URL 查询字符串值

    假设我有一个网址 例如 http www example com hello png w 100 h 100 bg white 我想做的是更新 w 和 h 查询字符串的值 但保持 bg 查询字符串不变 例如 http www example
  • 如何将 32 位图标的图像列表导出到单个 32 位位图文件中?

    我想编写一个小实用程序 它将帮助我从 EXE 资源加载单个 32 位位图 带 alpha ImageList1 DrawingStyle dsTransparent ImageList1 Handle ImageList LoadImage
  • pandas 自定义 idxmax() 函数,对相等性进行特殊处理

    我正在处理一个充满选举数据的 csv 文件 我的原始样本可以表示为 city party1 party2 party3 0 city1 50 107 114 1 city2 181 323 326 2 city3 26 28 75 3 ci
  • 使用Geopandas,如何通过采样方法在每个多边形中随机选择5个点

    我想根据随机采样方法在每个多边形中选择 5 个点 每个多边形中需要 5 个点坐标 纬度 经度 来识别种植的是哪种作物 使用 geopandas 有什么想法吗 非常感谢 我的建议包括对形状边界框内的随机 x 和 y 坐标进行采样 然后检查采样
  • Backbone 0.9.9:listenTo 和 on 之间的区别

    我正在尝试了解他们在 Backbone 0 9 9 中所做的新更改 目前我在理解之间的区别时遇到了问题listenTo and on listenTo var View Backbone View extend tagName div in
  • 删除切片中的小值

    How can I delete the small values in a slice plot In my plot there is basically too much blue and I cannot see the red p
  • 在graphviz中记录节点和rankdir

    当我将图表的rankdir从LR更改为TD时 我的记录节点也更改了它们的布局方向 因此它们不再看起来像 记录 我尝试对节点应用单独的rankdir 但这没有效果 如何使记录节点保持正确的布局 digraph sample graph ran
  • Windows Phone 8 模拟器错误 - 创建交换机时发生了一些情况

    我有一个类似的问题 就像这个问题中提到的 无法创建虚拟机 https stackoverflow com questions 13148828 windows phone 8 unable to create the virtual mac
  • 查看包含“很多”列的表格的最佳方式?

    冒着被降级的风险 我想问一下 使用 C 和lot列 我所说的很多 是指大约 1000 个 现在 在您感到高兴之前 或者抛出诸如 为什么您会有一个包含那么多列的表格 之类的回答之前 让我说这实际上是设计要求的一部分 我们正在尽可能快地从 10
  • Android应用程序许可证仅持续一段时间

    我们开发了一款 Android 应用程序 我们希望用户可以购买该应用程序 但只能购买一段时间 例如一年 一旦期限到期 他们应该在新的期限内再次购买该应用程序 我们查看了Google有关 应用程序许可 的信息 但已经有一段时间没有看到许可了
  • 基于 DataContext 属性的触发器

    假设我想根据 DataContext 中的属性值显示 隐藏元素 如何实现 In MainWindow xaml cs DataContext of MainWindow xaml public int Mode get set 在 XAML