Wpf 将DynamicSource绑定到BasedOn样式
我的要求是在具有以下情况的文本框上应用多种样式:Wpf 将DynamicSource绑定到BasedOn样式,wpf,xaml,Wpf,Xaml,我的要求是在具有以下情况的文本框上应用多种样式: 我在另一个文件中有一个样式(例如,MyTextStyle),比如“Generic.xaml” 我的文本框是ABC.xaml 我想对这个文本框应用一些触发器,所以我必须使用Textbox.Style 我还想应用“MyTextStyle” 当我执行以下操作时,会出现无法将DynamicSource应用于BasedOn的错误: <TextBox.Style> <Style BasedOn="{D
<TextBox.Style>
<Style BasedOn="{DynamicResource MyTextStyle}" TargetType="{x:Type TextBox}">
<Setter Property="Text" Value="{Binding SelectedCall.Name}" />
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedCall.Name}" Value="N/A">
<Setter Property="Text" Value="" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
请向我建议一些解决方案,以便我可以应用此DynamicSource以及我的datatrigger样式将
DynamicSource
更改为StaticResource
,如下所示:
<Style BasedOn="{StaticResource MyTextStyle}" TargetType="{x:Type TextBox}">
BasedOn中故意不允许使用DynamicSource
编辑:
您得到“找不到名为“EmptyTextBoxStyle”的资源”,因为应用程序找不到这个特定的静态资源。为了帮助应用程序找到它,您需要使用MergedDictionary。以下是如何在窗口内使用的示例:
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Generic.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
在另一个ResourceDictionary中,您应该使用以下内容:
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Generic.xaml" />
</ResourceDictionary.MergedDictionaries>
您需要以这种方式引用包含EmptyTextBoxStyle样式定义的ResourceDictionary。因此,例如,如果在Generic.xaml文件中声明了“EmptyTextBoxStyle”,并且您在ABC.xaml中使用它,那么您可以使用上面的xaml(当然,您需要根据您的项目结构更新源属性)。为什么要在BasedOn中使用DynamicSource而不是StaticResource?因为样式是“MyTextStyle”用于我的解决方案中的几乎所有文本框。因此,如果我为这个文本框专门(本地)定义它,这将是多余的。但它抛出运行时异常。抱歉,现在我无法向您展示我遇到的异常情况。将重试此操作,并于明天通知您。出现以下异常:“合成产生了一个合成错误。下面提供了根本原因。有关详细信息,请查看CompositionException.Errors属性。1)找不到名为“EmptyTextBoxStyle”的资源。资源名称区分大小写”。并且名称正确(即“EmptyTextBoxStyle”拼写正确)嗨。谢谢实际上,在我的解决方案中,ResourceDictionary被添加到控制器的一个构造函数中,该构造函数在这个ABC.xaml初始化之后被调用。不管怎么说,效果很好。非常感谢