XAML WPF 中 {x:Static} 和 {StaticResource} 之间的区别

2024-02-08

有什么区别{x:Static} and {StaticResource}在 WPF 的 XAML 代码中?

例如:

<StackPanel IsEnabled="{Binding Model.IsReadOnly, Converter={StaticResource BoolInverseConverter}}">

and

<StackPanel IsEnabled="{Binding Model.IsReadOnly, Converter={x:Static BoolInverseConverter}}">

我什么时候应该使用其中之一?


两者都是标记扩展。

x:Static https://learn.microsoft.com/en-us/dotnet/desktop-wpf/xaml-services/xstatic-markup-extension用于引用静态属性,该属性在运行时不会改变。这适用于枚举、常量、static属性,还有字段。
这意味着您的第二个代码示例是错误的,因为您不能引用类而只能引用属性。鉴于BoolInverseConverter is a static的财产Converters类,正确的代码如下:

<StackPanel IsEnabled="{Binding Model.IsReadOnly, Converter={x:Static Converters.BoolInverseConverter}}">

StaticResource https://learn.microsoft.com/en-us/dotnet/framework/wpf/advanced/xaml-resources#static-resources并不意味着资源是static就可访问性而言,而不是在资源查找方面。它是一个标记扩展,指示 XAML 解析器查找资源树以查找预定义实例。
同样的DynamicResource https://learn.microsoft.com/en-us/dotnet/framework/wpf/advanced/xaml-resources#dynamic-resources。唯一的区别是StaticResource指示 XAML 解析器在编译时解析对资源的引用,而DynamicResource让 XAML 解析器创建一个表达式,该表达式将在运行时计算(延迟)。DynamicResource因此在运行时解析资源。

以下代码片段显示了 XAML 解析器如何通过资源树查找来引用资源(转换器)。由于 XAML 标记扩展StaticResource使用时,查找是静态的。这意味着一旦找到资源,就不能被另一个实例替换。而且,如果在编译时未定义实例,应用程序将崩溃,抛出StaticResourceExtension。如果背后的资源x:key在运行时发生更改,引用不会更新(静态):

<StackPanel IsEnabled="{Binding Model.IsReadOnly, Converter={StaticResource BoolInverseConverter}}">

下一个代码片段再次显示了 XAML 解析器如何通过资源树查找来引用资源(转换器)。但这次使用的是DynamicResource标记扩展,使查找变得动态。这意味着将在运行时查找资源。并且每次特定的资源x:Key变化,例如Brush,引用实例将相应更新(动态):

<StackPanel IsEnabled="{Binding Model.IsReadOnly, Converter={DynamicResource BoolInverseConverter}}">

另一个代码片段展示了如何引用一个实例,该实例不是资源,而是一个static中定义的属性Converters类,使用x:static标记扩展:

<StackPanel IsEnabled="{Binding Model.IsReadOnly, Converter={x:Static Converters.BoolInverseConverter}}">

最后一个代码片段显示了另一个用例x:Static标记扩展。这次它用于引用枚举值(enum)并设置Visibility属性的值Visibility枚举:

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

XAML WPF 中 {x:Static} 和 {StaticResource} 之间的区别 的相关文章

  • 自己绘制的WPF自定义滑块

    这是我关于堆栈溢出的第一个问题 所以不要踢它 我在尝试创建 Mac 风格的滑块控件时遇到问题 我已经发现这个解决方案 http www codeproject com KB miscctrl MAC Slider aspx我已经在我的解决方
  • WPF - 使用 DataTemplates 将数据绑定到 StackPanel

    我修改了我的问题 因为它在尝试时改变了焦点 我将问题缩小到以下范围 我尝试将 TreeView 的选定项绑定到 StackPanel 或可以容纳用户控件的其他容器 然后 该容器将显示一个 UserControl 具体取决于所选项目的类型 这
  • 文件夹结构中的链接文件

    在 Visual Studio 中 当我将文件从一个项目链接到下一个项目时 在尝试加载链接的资源时出现以下错误 仅当链接文件位于文件夹内时才会发生这种情况 Error Message pack application projectName
  • AppBarButton.Icon 在运行时不会改变

    根据某些条件 我在运行时更新 AppBarButton 图标时遇到问题
  • 运行WPF应用程序时出错

    该应用程序在制作它的计算机上运行良好 但是当我将其复制到另一台相同的操作系统时 它崩溃并显示以下错误 Problem signature Problem Event Name CLR20r3 Problem Signature 01 vpn
  • 隐藏 AppBar 中的省略号

    当您在 UWP 应用中创建 AppBar 或 CommandBar 时 控件侧面附近总会隐藏一个省略号 如下所示 我不想在我的应用程序中使用它 但我没有在其中找到任何方法 属性AppBar这会帮助我摆脱它 这应该是可能的 因为许多默认的 W
  • WPF XAML 网格可见性触发器

    我的网格第一行有一条状态消息 我希望它在可见性发生变化时滑入和滑出 第一个可见性触发器效果很好 可以快速打开第一个网格行 一旦我添加 折叠 触发器 就什么都不起作用了 当可见性设置为折叠时 如何反转动画以滑动关闭
  • 根据项目类型和视图选项切换 ListBox ItemTemplate

    我目前正在 WPF 中实现一个列表框 其项目有 2 个替代布局 到目前为止 我已经使用了DataTrigger切换ItemTemplate为了ListBox并且运行良好
  • 如何更改 x:Bind 的默认模式?

    我不知道为什么他们决定设置默认值Mode to OneTime但这不是我大多数时候想要的 浪费了我一整天的时间去调试 有没有办法设置OneWay值作为默认值Mode of x Bind
  • 如何将用户控件的属性绑定到 WPF 中同一控件的属性?

    在我的用户控件中 我有一个收款电话解决方案 public List
  • WPF DataGrid 验证错误?

    这可能是预期的功能 但对我来说它确实像是一个错误 我正在使用开箱即用的 WPF DataGrid 绑定到 ObservableCollection 和尝试使用一些验证规则来提供良好的用户反馈 不用说 问题多得我数不过来 但我会坚持眼前的问题
  • 如何在 C#/XAML Windows 应用商店 (Metro UI) 应用程序中混合浅色和深色主题?

    根据 MSDN 设置应用程序主题的标准方法是设置RequestedTheme Dark or RequestedTheme Light 在顶层Application实例 这对于简单的应用程序非常有用 但很多时候我发现自己想要更改单个页面甚至
  • Prism 应用程序中的数据模型位于何处?

    我无法将数据模型放置在 Prism 应用程序中的何处 大多数 如果不是全部 数据将来自网络服务 并且每个模块的网络服务都是唯一的 不幸的是 有些对象需要共享 例如人员 用户对象 我真的很困惑是否将这些服务直接添加到模块中 以便每个服务真正独
  • 将可见性属性绑定到变量

    我有一个Border with Label里面一个Window
  • 有没有办法判断当前屏幕是否支持触摸? [复制]

    这个问题在这里已经有答案了 可能的重复 是否可以让我的 c wpf 程序知道用户是否有触摸屏 https stackoverflow com questions 5673556 is it possible to let my c shar
  • TextBlock:Text与StringFormat的绑定

    是否可以绑定Text and StringFormat too
  • 网格上的 SharedSizeScope 使表单“跳舞”

    我的页面上有一个 StackPanel 也尝试过使用 Grid
  • 以编程方式将 UserControl 从 ContentControl 移动到另一个 ContentControl

    在 WPF 应用程序中 我想在代码中将 UserControl 从 ContentControl 移动到另一个控件 myContentControl2 Content myUserControl 在这种情况下我得到一个错误 指定的元素已经是
  • 处置 StreamResourceInfo.Stream

    I use StreamResourceInfo Stream to get BitmapImage来自资源 是否正确Close and Dispose使用后的流 我问这个问题是因为在内存分析器中 如果这样做我会收到错误 内存分析器表示已处
  • WPF - 将窗口置于前面

    我有一个 WPF 窗口 我没有关闭它 相反 我执行 Hide 和 Show 它 现在 当我双击记录上网格中的主窗口时 这将触发 Show 窗口 该窗口将始终显示在主窗口后面 我尝试过以下方法 但没有成功 view Show view Act

随机推荐

  • 如何在 ASP.NET Core 中获取 HttpContext.Current.Session?

    我需要将 MVC 项目迁移到 net Core 我知道它已从 ASP net Core 中删除了 System Web 我需要转换 HttpContext Current Session 名称 在 ASP NET Core 中为 Null
  • 访问 Firefox 中的文件下载对话框

    是否有任何类型的 API 可以让我在 Firefox 中操作文件下载对话框 我想访问用户执行某些操作时出现的内容 而不是自己启动的内容 我想做的是从 Selenium 访问这个对话框 我也不确定 Selenium 特权模式 是否足以访问 c
  • MSB3411 无法加载 Visual C++ 组件

    我有 MS Visual Studio 2012 Ultimate 操作系统是 Windows 7 并且安装了 nodeJs 我想使用 npm 安装 socket io 但出现以下错误 C Users NEW gt npm install
  • 哪些标准 C++ 类不能在 C++ 中重新实现?

    我正在查看 C 0x 的计划并发现std initializer list用于在用户类中实现初始值设定项列表 此类无法在 C 中实现 不使用自身 或者使用一些 编译器魔法 如果可以的话 就不需要它了 因为无论您使用什么技术来实现initia
  • 如何屏蔽图片的 Facebook 图形 api URL?

    我正在尝试在我的网站上显示 Facebook 个人资料图片 但不想泄露源中人员的 Facebook ID 例如 这个网址 http graph facebook com 4 picture http graph facebook com 4
  • 具有 MySQL 故障转移功能的 Hibernate Web 应用程序

    我开发了一个 Java Web 应用程序 使用 Hibernate 3 3 2 作为持久性框架 使用 Apache Tomcat 7 0 27 作为服务器 该应用程序已成功设置为使用 MySQL 5 5 复制服务器 1 个主服务器 1 个从
  • 如何将 vtkSphere 保存到 VTK 文件?

    我正在尝试将多个球体保存到一个文件中 以便稍后使用 ParaView 进行可视化 我拥有的是一个文本文件 其中包含有关每个球体的位置和形状 半径 的信息 我正在使用 Python 和 VTK 构建一个文件来可视化 ParaView 中的数据
  • 使用 OR 工具在 python 中进行约束优化:如何强制执行多级约束?

    我有一个优化问题 我有一个 BoolVar 对象列表的列表 所以像这样 BoolVar1 BoolVar2 BoolVar3 BoolVar4 BoolVar5 BoolVar6 我需要评估以下内容 BoolVar1 BoolVar2 Bo
  • 关于 C# 的 AOP 的建议 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 MySQL DB 完成 Java 桌面应用程序后如何创建安装程序?

    我已经用 mySQL 数据库编写了一个 Java 桌面应用程序 我想让应用程序在netbeans之外运行并让它安装在其他计算机上 我知道如何构建项目并创建可运行的 jar 文件 但这需要我将数据库本身导出到我希望应用程序运行的另一台计算机
  • apache 全局基本身份验证

    我有 apache Web 服务器和几个虚拟主机 我希望它们都支持基本授权 AuthType Basic 但是 Auth 指令似乎仅适用于
  • NSURLSession 使用 get 发送参数

    我正在尝试解析来自 php 的信息 但我需要发送一个字典参数 所以我尝试了一些事情 我看到了教程 示例 但我陷入困境 所以我回到了开始 这是什么好方法这样做吗 func asd let urlPath http xxxxx php let
  • 为什么 Spyder 在 OS X 中这么慢?有没有办法让它更快?

    我安装了 Spyder 作为 Anaconda Python 分析包的一部分 但我发现编辑器非常慢 按键和屏幕上显示字母之间总是有半秒的延迟时间 我在一台相当新的 i7 MacBook 上使用 Spyder 这个问题是由 Qt 产生的 Qt
  • 监听/通知 pgconnection 宕机了 java?

    我正在使用 PostgreSQL DB 并应用它LISTEN NOTIFY功能 所以我的监听器位于我的 AS 应用程序服务器 上 并且我在数据库上配置了触发器 这样当对表执行 CRUD 操作时NOTIFY请求在 AS 上发送 LISTENE
  • python 类继承树

    假设我有这样的课程 class a object pass class b a pass class c b pass class d c pass class e b pass 我想要一个可以执行以下操作的函数 gt gt gt get
  • 哈希表和子串匹配

    我有数百个键 例如 红苹果 maninred foraman 蓝苹果 我有与这些键相关的数据 数据是一个字符串 末尾有相关的键 红苹果 树上有红苹果 maninred 她看到了maninred 孔洞 他们买了现在的孔洞 蓝苹果 令人惊讶 但
  • 在 C++ 中创建全局“常量”的正确方法[重复]

    这个问题在这里已经有答案了 通常 我定义真正的全局常量 比如说 pi 的方法是将 extern const 放置在头文件中 并在 cpp 文件中定义该常量 常量 h extern const pi 常量 cpp include consta
  • T-SQL。如何在一个 SELECT 中创建列表作为逗号分隔的字符串?

    MS SQL 2005 T SQL 我发现了很多如何分割字符串的好解决方案 但是如何将内部 SELECT 的结果组合为字符串 例如 使用逗号分隔符 代码 SELECT b date SELECT o number FROM order o
  • 为什么 flutter 停止在 ios 上启动我的应用程序

    突然之间 我无法运行使用 firebase 的 flutter 应用程序 显然 pod 安装过程存在问题 某些依赖项不兼容 鉴于我没有更改 yaml 文件中的任何内容 并且应用程序今天早上运行良好 我认为工具存在问题 而不是我的源代码 这个
  • XAML WPF 中 {x:Static} 和 {StaticResource} 之间的区别

    有什么区别 x Static and StaticResource 在 WPF 的 XAML 代码中 例如