更改 WPF DatePicker 文本框的外观

问题描述 投票:0回答:3

更改 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?

wpf datepicker controltemplate
3个回答
7
投票

您可以更改 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>
© www.soinside.com 2019 - 2024. All rights reserved.