我想更改DatePicker
控件上焦点状态的边框颜色。
我看了看默认样式模板,没有看到VisualStateManager
的任何焦点状态。
我唯一看到的是TextBox
的原始控件,如下所示:
<controlsPrimitives:DatePickerTextBox x:Name="TextBox" SelectionBackground="{TemplateBinding SelectionBackground}" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}" Grid.Column="0" />
如何更改
DatePicker
边框的焦点状态的颜色...我毫无疑问地更改TextBox
,ComboBox
和CheckBox
控件的颜色。请帮忙!
最佳答案
没错,DatePicker
控件没有VisualStateManager
的Focus状态。请注意,可以为DatePicker
添加状态组和“已聚焦” /“未聚焦”状态,但这并不是最好的方法。DatePicker
控件的template包含一个DatePickerTextBox
control,根据MSDN,该DatePicker
“表示DatePickerTextBox
的文本输入”。
查看FocusStates
的模板,我们发现它具有一个Unfocused
状态组,以及Focused
和#FF6DBDD1
状态的定义。我们还找到以下行:
<Border x:Name="FocusVisual" BorderBrush="#FF6DBDD1" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="1" IsHitTestVisible="False" Opacity="0"/>
如您所见,默认的“聚焦颜色”为on MSDN。
Focused
的DatePickerTextBox
状态将此边框的Opacity
属性设置为1
。要更改
Focused
状态的边框颜色,可以创建此模板的副本,将#FF6DBDD1
替换为所需的颜色。然后,创建DatePicker
模板的副本,该副本应指定其中包含的DatePickerTextBox
应该使用修改后的模板。或者,您可以创建
DatePickerTextBox
模板的副本,对边框颜色进行调整,然后将该模板放置为TargetType
设置为DatePickerTextBox
的样式:<Style x:Key="MyStyle1" TargetType="DatePickerTextBox">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DatePickerTextBox">
<!-- Modified template for DatePickerTextBox goes here -->
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
希望这对您有用!
编辑:
DatePickerTextBox
的默认模板here提供了大多数控件的默认样式和模板。但是(出于某种原因),
DatePickerTextBox
不是。如果您有Expression Blend的副本(如果您使用控件的外观,我强烈建议您使用它;它非常宝贵-下载免费试用版this thread),您可以执行以下操作:右键单击
DatePicker
,单击“编辑模板->编辑副本...”。您将在“对象和时间轴”面板中看到DatePickerTextBox
。右键单击,再单击“编辑模板->编辑副本...”。然后,您可以在“对象和时间轴”面板中右键单击模板,然后单击“查看XAML”。再说一次,如果您正在做这样的工作,我不建议您高度混合。从长远来看,它将为您节省大量时间(并且您将学到很多有关XAML,样式,模板以及它们如何组合在一起的信息,等等)。但是,如果您无权访问它,则这是
DatePickerTextBox
控件的默认模板:<Style x:Key="DatePickerTextBoxStyle" TargetType="System_Windows_Controls_Primitives:DatePickerTextBox">
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="HorizontalContentAlignment" Value="Left"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="System_Windows_Controls_Primitives:DatePickerTextBox">
<Grid x:Name="Root">
<Grid.Resources>
<SolidColorBrush x:Key="WatermarkBrush" Color="#FFAAAAAA"/>
</Grid.Resources>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0"/>
<VisualTransition GeneratedDuration="0:0:0.1" To="MouseOver"/>
</VisualStateGroup.Transitions>
<VisualState x:Name="Normal"/>
<VisualState x:Name="MouseOver">
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" Storyboard.TargetName="ContentElement">
<SplineColorKeyFrame KeyTime="0" Value="#FF99C1E2"/>
</ColorAnimationUsingKeyFrames>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" Storyboard.TargetName="ContentElement2">
<SplineColorKeyFrame KeyTime="0" Value="#FF99C1E2"/>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="WatermarkStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0"/>
</VisualStateGroup.Transitions>
<VisualState x:Name="Unwatermarked"/>
<VisualState x:Name="Watermarked">
<Storyboard>
<DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="ContentElement"/>
<DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="Watermark"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="FocusStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0"/>
</VisualStateGroup.Transitions>
<VisualState x:Name="Unfocused"/>
<VisualState x:Name="Focused">
<Storyboard>
<DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="FocusVisual"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Border x:Name="Border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="1" Opacity="1">
<Grid x:Name="WatermarkContent" Background="{TemplateBinding Background}">
<Border x:Name="ContentElement" BorderBrush="#FFFFFFFF" BorderThickness="1" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}"/>
<Border x:Name="ContentElement2" BorderBrush="#FFFFFFFF" BorderThickness="1">
<ContentControl x:Name="Watermark" Background="{TemplateBinding Background}" Content="{TemplateBinding Watermark}" Foreground="{StaticResource WatermarkBrush}" FontSize="{TemplateBinding FontSize}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" IsHitTestVisible="False" IsTabStop="False" Opacity="0" Padding="2" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
<Border x:Name="FocusVisual" BorderBrush="#FF6DBDD1" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="1" IsHitTestVisible="False" Opacity="0"/>
</Grid>
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
对于长度,我们深表歉意,非常感谢(存在相同的问题)。
关于c# - 更改DatePicker的边框颜色,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4382045/