xaml – 如何更改特定元素的TextBox占位符文本颜色,而不是全局
MSDN列出了TextBox类
here的样式和模板.我可以通过在App.xaml中创建一个ResourceDictionary来覆盖这些主题资源,如下所示:
<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,但它不起作用. 我真的不想重新定义模板只是为了改变这个属性. 编辑Heena的答案很接近,但我还想为明暗主题设置不同的颜色,因为我的文本框具有透明的背景颜色. 我设法通过将Foreground =“{ThemeResource TextBoxPlaceholderTextThemeBrush}”作为模板的一部分来实现这一目标(因此,换句话说,模板完全是MSDN的默认模板),然后在页面资源中指定: <Page.Resources> <ResourceDictionary.ThemeDictionaries> <ResourceDictionary x:Key="Light"> <SolidColorBrush x:Key="TextBoxPlaceholderTextThemeBrush" Color="Blue"/> </ResourceDictionary> ... </ResourceDictionary.ThemeDictionaries> </Page.Resources> 但这现在意味着我必须在我的页面资源中为文本框放置一个巨大的ControlTemplate样式设置器,这只是默认的完全重复! 这是否与在ControlTemplate中解析TextBoxPlaceholderTextThemeBrush的方式有关?即它发现我的自定义主题词典的原因是因为ControlTemplate是在同一资源字典中定义的? 应该怎么做?我应该只是将文本框子类化,以便将所有XAML移动到另一个文件(即使它仅用于一个文本框)?
假设您使用的是MSDN Textbox
Style
资源 <Page.Resources> <!--From MSDN : Default style for Windows.UI.Xaml.Controls.TextBox --> <Style x:Key="MsdnTextboxStyle" TargetType="TextBox"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="TextBox"> ..... ..... <ContentControl x:Name="PlaceholderTextContentPresenter" Grid.Row="1" Margin="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}" IsTabStop="False" Grid.ColumnSpan="2" Content="{TemplateBinding PlaceholderText}" IsHitTestVisible="False"/> </ControlTemplate> </Setter.Value> </Setter> </Style> </Page.Resources> XAML <StackPanel Orientation="Horizontal"> <TextBox PlaceholderText="PlaceholderText here..." Style="{StaticResource MsdnTextboxStyle}" Margin="20" Foreground="Red" Height="30" Width="120"> <TextBox.Resources> <Style TargetType="ContentControl"> <Setter Property="Foreground" Value="Green"/> </Style> </TextBox.Resources> </TextBox> <TextBox PlaceholderText="PlaceholderText here..." Style="{StaticResource MsdnTextboxStyle}" Margin="20" Foreground="Red" Height="30" Width="120"> <TextBox.Resources> <Style TargetType="ContentControl"> <Setter Property="Foreground" Value="Red"/> </Style> </TextBox.Resources> </TextBox> <TextBox PlaceholderText="PlaceholderText here..." Style="{StaticResource MsdnTextboxStyle}" Margin="20" Foreground="Red" Height="30" Width="120"> <TextBox.Resources> <Style TargetType="ContentControl"> <Setter Property="Foreground" Value="Blue"/> </Style> </TextBox.Resources> </TextBox> </StackPanel> 更新 资源 从模板中的Contencontrol中删除前景属性< ContentControl Foreground =“{ThemeResource TextBoxPlaceholderTextThemeBrush}”/> <Page.Resources> <ResourceDictionary> <ResourceDictionary.ThemeDictionaries> <ResourceDictionary x:Key="Default"> <SolidColorBrush x:Key="ContentControlForeGround" Color="Red"></SolidColorBrush> <SolidColorBrush x:Key="ContentControlForeGround1" Color="Yellow"></SolidColorBrush> </ResourceDictionary> <ResourceDictionary x:Key="Light"> <SolidColorBrush x:Key="ContentControlForeGround" Color="Blue"></SolidColorBrush> <SolidColorBrush x:Key="ContentControlForeGround1" Color="SkyBlue"></SolidColorBrush> </ResourceDictionary> <ResourceDictionary x:Key="Dark"> <SolidColorBrush x:Key="ContentControlForeGround" Color="Green"></SolidColorBrush> <SolidColorBrush x:Key="ContentControlForeGround1" Color="Chocolate"></SolidColorBrush> </ResourceDictionary> </ResourceDictionary.ThemeDictionaries> <Style x:Key="TextBoxStyle1" TargetType="TextBox"> ..... <ContentControl x:Name="PlaceholderTextContentPresenter" Grid.ColumnSpan="2" Content="{TemplateBinding PlaceholderText}" IsHitTestVisible="False" IsTabStop="False" Margin="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}" Grid.Row="1"/> ...... </Style> </ResourceDictionary> </Page.Resources> XAML <StackPanel Orientation="Horizontal"> <TextBox Style="{StaticResource TextBoxStyle1}" PlaceholderText="PlaceholderText here..." Margin="20" Foreground="Red" Height="30" Width="170"> <TextBox.Resources> <Style TargetType="ContentControl"> <Setter Property="Foreground" Value="{StaticResource ContentControlForeGround}"></Setter> </Style> </TextBox.Resources> </TextBox> <TextBox Style="{StaticResource TextBoxStyle1}" PlaceholderText="PlaceholderText here..." Margin="20" Foreground="Red" Height="30" Width="170"> <TextBox.Resources> <Style TargetType="ContentControl"> <Setter Property="Foreground" Value="{StaticResource ContentControlForeGround1}"></Setter> </Style> </TextBox.Resources> </TextBox> </StackPanel> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 托管 – 自助主机或租用主机:.Net Windows服务与PHP Web应
- 双重身份验证——加强Windows安全性
- windows – 如何编写.bat或.cmd文件以从PATH中删除元素?
- 如何编写脚本来修改Windows Server上用户的密码到期值?
- windows-server-2008-r2 – Windows Server 2008中的“Appl
- 如何为Windows Azure Webrole上的PHP项目配置TFS构建定义以
- windows-8 – Expression Blend中的“星形”测量是什么?
- Windows关闭/重新启动通知程序提供延迟选项,类似于自动更新
- Windows – 使用JDK 7构建Cocoon 2.1.0失败:compile-build
- Windows缺少Python.h