Xaml 资源字典中的静态属性
我的XAML工作得很好,引用了静态类的静态属性Xaml 资源字典中的静态属性,xaml,mvvm,binding,static,Xaml,Mvvm,Binding,Static,我的XAML工作得很好,引用了静态类的静态属性 <TextBox IsReadOnly="{x:Static loc:StateMachine.IsReadOnly}" /> 现在我想重构上面的内容,这样我就可以使用ResourceDictionary了 所以,我的资源字典是 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
<TextBox IsReadOnly="{x:Static loc:StateMachine.IsReadOnly}" />
现在我想重构上面的内容,这样我就可以使用ResourceDictionary了
所以,我的资源字典是
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:stat="clr-namespace:MyProjectHelper"
>
<stat:StateMachine x:Key="StaticResources" />
</ResourceDictionary>
在我的XAML中,我删除了名为loc的名称空间引用(我正在使用它),并向资源字典中添加了一个引用(这是因为我的视图显示和转换器执行它们的工作),但是当我添加以下代码时
<TextBox IsReadOnly="{StaticResource StaticResources.IsReadOnly}" />
我得到一个运行时异常
“System.Windows.StaticResourceExtension”上的“提供值”引发异常。“行号“50”和行位置“97”
我的研究表明,这是XML的一个错误——它可能是一个输入错误(已检查)或一个意外的值,但我看不出我需要做什么来修复这个问题,尽管查看了SO和Google
我也试过了
<TextBox IsReadOnly="{Binding Source={StaticResource StaticResources}, Path=IsReadOnly}" />
但例外是
'对与指定绑定约束匹配的类型'SeoHelper.StateMachine'调用构造函数时引发异常。'行号'9'和行位置'6'
{StaticResource}
绑定需要能够实例化您的类,但由于该类是静态的,所以在实例化时遇到了问题。如果该类没有声明为静态的,那么您的上一次尝试就会成功
可能的解决方法如果需要保持类的静态,可以使用StaticExtension
将属性而不是类注册到资源字典:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:stat="clr-namespace:MyProjectHelper"
>
<x:StaticExtension Member="stat:StateMachine.IsReadOnly" x:Key="StaticResources"/>
</ResourceDictionary>
然后可以像往常一样绑定到资源:
<TextBox IsReadOnly="{StaticResource StaticResources}" />