我的要求是在具有以下情况的文本框中应用多种样式:
当我执行以下操作时,它给出了我无法将DynamicResource应用于BasedOn的错误:
<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>
请建议我一些解决方案,以便我可以应用此Dynamicresource以及我的数据触发器样式
答案 0 :(得分:8)
将DynamicResource
更改为StaticResource
,如下所示:
<Style BasedOn="{StaticResource MyTextStyle}" TargetType="{x:Type TextBox}">
在BasedOn中故意不允许使用DynamicResource。
修改强> 你有“无法找到名为'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(当然,您需要根据项目结构更新Source属性)。 / p>