【发布时间】:2012-05-16 15:02:41
【问题描述】:
一些与问题相关的信息:http://www.11011.net/archives/000692.html
具体情况是:在第三方应用程序中的 app.xaml 中声明了一些通用文本块(键等于类型)样式,在我看来,所有内容呈现者都使用它们而忽略了我自己的样式。
我发现了几个可能的解决方案:
显式地为所有元素分配一个具有覆盖模板的样式并将包含我的样式的资源字典添加到 contentpresenter 资源。
为字符串添加数据模板,但访问文本检测存在问题(可以通过将带有 ref 的 contentpresenter 放置到我自己的资源中来解决,这不是一个好的解决方案,因为我们增加了可视化树只是为了解决这个问题)
可能还有其他解决方案吗?
P.S.:已经存在很多视图,所以第一个选项是很多工作!
重现创建新的 wpf 项目并修改下一个文件:
App.xaml 添加通用样式:
<Application.Resources>
<Style TargetType="TextBlock">
<Setter Property="FontSize" Value="20"/>
</Style>
</Application.Resources>
MainWindow.xaml 内容为:
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<StackPanel>
<Button Content="Hello world">
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="Access_Text"/>
<MenuItem Header="NormalText"/>
</ContextMenu>
</Button.ContextMenu>
</Button>
<TextBlock Text="WELCOME TO BLACK MESA"/>
</StackPanel>
添加 Dictionary.xaml 资源字典并在里面添加下一个样式:
<Style TargetType="TextBlock">
<Setter Property="FontSize" Value="8"/>
</Style>
【问题讨论】:
-
你见过this question,可能适用。
-
很好的提示,但类似于第一种解决方案,在这种情况下,我们不需要覆盖所有模板,只需查找子 contentpresenters 即可添加对自己资源字典的引用。
标签: c# wpf inheritance styling