更改 DatePicker 的边框颜色

Gab*_*abe 2 c# silverlight xaml

我想更改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" />
Run Code Online (Sandbox Code Playgroud)

如何更改为边界的焦点状态的颜色DatePicker......我没有问题,改变这种颜色的TextBoxComboBoxCheckBox控制。

请帮忙!

Don*_*nut 5

你是对的,DatePicker控件没有VisualStateManager. 请注意,这可以添加的状态组和聚焦/未聚焦状态的DatePicker,但不会是最好的方法在这里。

模板用于DatePicker控制包含一个DatePickerTextBox控制,其中,根据MSDN,“表示的文本输入DatePicker”。

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

<Border x:Name="FocusVisual" BorderBrush="#FF6DBDD1" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="1" IsHitTestVisible="False" Opacity="0"/>
Run Code Online (Sandbox Code Playgroud)

如您所见,默认的“聚焦颜色”是#FF6DBDD1. 的Focused状态将此边框DatePickerTextBoxOpacity属性设置为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>
Run Code Online (Sandbox Code Playgroud)

希望这对你有用!


编辑:DatePickerTextBoxMSDN
上提供大多数控件的默认样式和模板的默认模板。但是(无论出于何种原因),不是。如果您有 Expression Blend 的副本(如果您正在处理控件的外观,我强烈推荐它;它非常宝贵——在此处下载免费试用版),您可以执行以下操作:DatePickerTextBox

右键单击 a 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> 
Run Code Online (Sandbox Code Playgroud)

为篇幅道歉,非常感谢这个线程(有同样的问题)。