更改WPF DatePicker的文本框外观

8
改变WPF DatePicker的Foreground属性确实会改变文本框中文本的颜色,但是改变Background属性却不会。但是你可以通过为包含的DatePickerTextBox设置样式来改变它。所以我最终得到了这个结果:
<DatePicker Foreground="Yellow" >
    <DatePicker.Resources>
        <Style TargetType="{x:Type DatePickerTextBox}" >
            <Setter Property="Background" Value="Black" />
        </Style>
    </DatePicker.Resources>
</DatePicker>

有没有更整洁的方法可以在不为整个控件创建模板的情况下完成这个? 是否可以只为具名部分即PART_TextBox创建模板?
3个回答

9
你可以更改DatePickerTextBox的样式 代码
<DatePicker>
    <DatePicker.Resources>
        <Style TargetType="{x:Type DatePickerTextBox}">
            <Setter Property="Control.Template">
                <Setter.Value>
                    <ControlTemplate>
                        <TextBox x:Name="PART_TextBox" 
                                    Text="{Binding Path=SelectedDate, RelativeSource={RelativeSource AncestorType={x:Type DatePicker}}}" />
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </DatePicker.Resources>
</DatePicker>

请参考此链接 自定义WPF DatePickerTextBox模板帮助

1

有没有更简洁的方法,在不对整个控件进行模板化的情况下完成这个操作?是否有一种方法只模板化命名部分,即PART_TextBox?

没有。如果一个元素在控件的模板中被定义(且未绑定到“父”控件本身的任何属性),则不能设置该元素的任何属性,除非重新定义整个模板或使用隐式样式。


0

这也是组合框的一个问题。您可以添加触发器来解决此问题,如下所示。

<Style TargetType="{x:Type TextBlock}" x:Key="TextBlockStyle">
    <Setter Property="Foreground" Value="WhiteSmoke"/>
    <Style.Triggers>
        <DataTrigger Binding="{Binding IsEnabled, 
            RelativeSource={RelativeSource AncestorType=ComboBox}}" Value="True">
            <Setter Property="Foreground" Value="Black"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding IsEnabled, 
            RelativeSource={RelativeSource AncestorType=DatePicker}}" Value="True">
            <Setter Property="Foreground" Value="Black"/>
        </DataTrigger>
    </Style.Triggers>
</Style>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接