我想在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
和{{ 1}}控件。
请帮助!
答案 0 :(得分:4)
你是对的,DatePicker
控件没有VisualStateManager
的焦点状态。请注意, 可以为DatePicker
添加状态组和聚焦/未聚焦状态,但这不是最佳方法。
DatePicker
控件的template包含DatePickerTextBox
control,根据MSDN,“代表DatePicker
的文本输入”。
查看DatePickerTextBox
的模板,我们发现它有一个FocusStates
州状态组,以及Unfocused
和Focused
状态的定义。我们也找到了这一行:
<Border x:Name="FocusVisual" BorderBrush="#FF6DBDD1" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="1" IsHitTestVisible="False" Opacity="0"/>
正如您所看到的,默认的“聚焦颜色”是#FF6DBDD1
。 Focused
的{{1}}州将此边框的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>
的默认模板
控件的大多数默认样式和模板都可用on MSDN。但是(无论出于何种原因),DatePickerTextBox
不是。如果您有Expression Blend的副本(我强烈建议您使用控件的外观;它非常宝贵 - 下载免费试用版here),您可以执行以下操作:
右键点击DatePickerTextBox
,点击“修改模板 - &gt;编辑副本...”。您将在“对象和时间轴”面板中看到DatePicker
。右键单击它,再次单击“编辑模板 - &gt;编辑副本...”。然后,您可以在“对象和时间线”面板中右键单击模板,然后单击“查看XAML”。
同样,如果你正在做这样的任何工作,我不能高度推荐Blend。从长远来看,它将为您节省大量时间(您将学习很多关于XAML,样式,模板,它们如何组合在一起等等)。但是,如果您无法访问它,则这是DatePickerTextBox
控件的默认模板:
DatePickerTextBox
长篇道歉,非常感谢this thread(有同样的问题)。
答案 1 :(得分:0)
这适合你吗?
public class MyDatePicker : DatePicker
{
public MyDatePicker()
{ }
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
DatePickerTextBox textBox = (DatePickerTextBox)this.GetTemplateChild("TextBox");
textBox.GotFocus += new RoutedEventHandler(textBox_GotFocus);
textBox.LostFocus += new RoutedEventHandler(textBox_LostFocus);
}
void textBox_GotFocus(object sender, RoutedEventArgs e)
{
(sender as DatePickerTextBox).BorderBrush = new SolidColorBrush(Colors.Red);
}
void textBox_LostFocus(object sender, RoutedEventArgs e)
{
(sender as DatePickerTextBox).ClearValue(DatePickerTextBox.BorderBrushProperty);
}
}