MSDN 列出了TextBox
class here。我可以通过创建一个来覆盖这些主题资源ResourceDictionary
in App.xaml
像这样:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.ThemeDictionaries>
<ResourceDictionary x:Key="Default">
<SolidColorBrush x:Key="TextBoxPlaceholderTextThemeBrush" Color="Yellow"/>
</ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>
</ResourceDictionary>
</Application.Resources>
但这会影响到每一个TextBox
在我的应用程序中。如何仅为特定元素设置此主题?
我试过把这本字典放进去Page.Resources
乃至TextBox.Resources
为了TextBox
我想应用它,但它不起作用。
I really不想重新定义Template
只是为了改变这个属性。
EDITHeena 的答案很接近,但我还想为浅色和深色主题设置不同的颜色,因为我的文本框有透明的背景颜色。
我通过保持Foreground="{ThemeResource TextBoxPlaceholderTextThemeBrush}"
作为Template
(因此,换句话说,该模板正是 MSDN 中的默认模板),然后在页面资源中指定:
<Page.Resources>
<ResourceDictionary.ThemeDictionaries>
<ResourceDictionary x:Key="Light">
<SolidColorBrush x:Key="TextBoxPlaceholderTextThemeBrush" Color="Blue"/>
</ResourceDictionary>
...
</ResourceDictionary.ThemeDictionaries>
</Page.Resources>
but现在这意味着我必须投入大量资金ControlTemplate
我的页面资源中的文本框的样式设置器也一样,无论如何,它只是默认值的精确复制!
这与如何做有关系吗TextBoxPlaceholderTextThemeBrush
是从内部解决的ControlTemplate
?即它发现我的自定义主题字典的原因是因为ControlTemplate
是在同一个资源字典中定义的吗?
这应该怎么做?我是否应该对文本框进行子类化,以便将所有 XAML 移动到另一个文件(即使它仅适用于一个文本框)?