gpt4 book ai didi

c# - 更改 DatePicker 的边框颜色

转载 作者:太空宇宙 更新时间:2023-11-03 22:17:54 31 4
gpt4 key购买 nike

我想更改 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 的颜色没有问题, ComboBoxCheckBox 控件。

请帮忙!

最佳答案

没错,DatePicker 控件没有 VisualStateManager 的焦点状态。请注意,可以DatePicker 添加状态组和 Focused/Unfocused 状态,但这不是这里的最佳方法。

template DatePicker 控件包含一个 DatePickerTextBox control ,根据 MSDN,“代表 DatePicker 的文本输入”。

查看 DatePickerTextBox 的模板,我们发现它有一个 FocusStates 状态组,以及 UnfocusedFocused 状态。我们还找到了这一行:

<Border x:Name="FocusVisual" BorderBrush="#FF6DBDD1" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="1" IsHitTestVisible="False" Opacity="0"/>

如您所见,默认的“聚焦颜色”是 #FF6DBDD1 . DatePickerTextBoxFocused 状态将此边框的 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的默认模板
大多数控件的默认样式和模板都可用 on MSDN .但是(无论出于何种原因),DatePickerTextBox 不是。如果您有 Expression Blend 的副本(如果您正在处理控件的外观,我强烈推荐它;它非常宝贵 -- 下载免费试用版 here),您可以执行以下操作:

右键单击 DatePicker,单击“编辑模板 -> 编辑副本...”。您将在“对象和时间轴”面板中看到 DatePickerTextBox。右键单击它,再次单击“编辑模板 -> 编辑副本...”。然后,您可以右键单击“对象和时间轴”面板中的模板,然后单击“查看 XAML”。

再说一遍,如果您正在从事此类工作,我对 Blend 的推荐再多也不为过。从长远来看,它将为您节省大量时间(并且您将学到大量有关 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>

对于篇幅表示歉意,非常感谢this thread (有同样的问题)。

关于c# - 更改 DatePicker 的边框颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4382045/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com