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"

我的XAML工作得很好,引用了静态类的静态属性

<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}" />