我想更改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边框的焦点状态的颜色...我毫无疑问地更改TextBoxComboBoxCheckBox控件的颜色。

请帮忙!

最佳答案

没错,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 MSDNFocusedDatePickerTextBox状态将此边框的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/

10-11 12:27