我想为文本框制作一个简单的样式。我想保留关于的一切 除了一个项目之外的标准文本框外观。
OnFocus on希望能够更改文本框的边框颜色。
我写了以下内容并且确实有效。但是,我必须重新设计一切 声明高度,非聚焦边界的外观和感觉也不同。如何创建模板以仅仅影响onfocus状态。
<Style x:Key="TextBoxStyle" TargetType="TextBox">
<Setter Property="BorderBrush" Value="Gold" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBox">
<Grid Height="{TemplateBinding Height}"
>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal" />
<VisualState x:Name="MouseOver" />
<VisualState x:Name="Pressed" />
<VisualState x:Name="Disabled" />
</VisualStateGroup>
<VisualStateGroup x:Name="FocusStates">
<VisualState x:Name="Focused">
<Storyboard>
<ColorAnimation Storyboard.TargetName="brd"
Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)"
Duration="0"
To="Red" />
</Storyboard>
</VisualState>
<VisualState x:Name="Unfocused"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Border x:Name="brd"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}"
CornerRadius="2">
<ContentPresenter x:Name="contentPresenter" />
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
答案 0 :(得分:2)
您需要复制原始TextBox的整个模板,您可以找到here。然后进行所需的更改。
答案 1 :(得分:0)
SirDemon提到的例子......
以下是文本块的样式:
<Style
x:Key="detailBlk"
TargetType="TextBlock">
<Setter
Property="FontSize"
Value="10" />
<Setter
Property="Foreground"
Value="Purple" />
</Style>
假设我想要另一种FontSize为20的样式,但前景色仍为紫色:
<Style
x:Key="detailBlk20"
TargetType="TextBlock"
BasedOn="{StaticResource detailBlk}">
<Setter
Property="FontSize"
Value="20" />
</Style>
编辑抱歉,重读问题。您想要更改模板。 setter属性可以设置任何属性。有趣的是,模板是一个属性,因此可以在样式中设置。但是,据我所知,您无法更改模板的各个部分。