xaml中x:static和StaticResource的区别

转载翻译

https://stackoverflow.com/questions/60754206/difference-between-xstatic-and-staticresource-in-xaml-wpf

说明

在wpf xaml中使用{x:static}和{StaticResource}的区别是什么
如下

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

这两个都是标记扩展。
x:static表示对一个static特性的引用,在运行期间都不会发生改变。多用于枚举、常量、static属性字段等。这意味着第二行代码错误因为x:static只能引用一个属性而不能引用一个类。
将BoolInverseConverter设置为Converter类中的一个静态属性,那么正确的代码如下

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

StaticResource 不意味着Resource在可访问方面是静态的,而是在资源查找方面是静态的。StaticResource指示XAML解析器查找资源树用来找到预定义的实例。

同理DynamicResource,区别点在于StaticResource在编译时查找解析资源。而DynamicResource让XAML创建一个表达式,它将会在运行时执行。

下面的代码显示了Resource是怎样在XAML中引用的。一旦标记扩展StaticResource使用,它的查找就是静态的。这意味着一旦这个资源被找到,就不能替换为其他资源。同时,如果在编译时没有定义,软件会抛出异常“StaticResourceExtension”。如果key在运行时更改,引用将不会更新。

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

下一个代码同样是显示资源是怎么引用的,不过使用的是Dynamic。当它的key更改时,引用会更新

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

后两个使用的分别是x:static和enum就不再赘述。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值