2017-02-24 62 views
1

更改WPF的Foreground属性DatePicker确实会更改文本框中文本的颜色,但更改Background属性不会。但是,您可以通过对包含的DatePickerTextBox进行样式化来更改它。所以我结束了这一点:更改WPF DatePicker文本框的外观

<DatePicker Foreground="Yellow" > 
    <DatePicker.Resources> 
     <Style TargetType="{x:Type DatePickerTextBox}" > 
      <Setter Property="Background" Value="Black" /> 
     </Style> 
    </DatePicker.Resources> 
</DatePicker> 

是否有这样做没有模板化的整体控制的一个整洁的方式吗? 有没有办法模拟指定的部分,即PART_TextBox?

回答

0

有没有模板化整个控制这样做的一个更整洁的方式?有没有办法模拟指定的部分,即PART_TextBox?

号不能无需重新定义整个模板或集合(控制本身和未绑定到“父”的任何属性),其被控制的模板中所定义的元素的任何性质使用隐式样式。

1

你可以改变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> 

请参考以下链接Custom WPF DatePickerTextBox Template Help

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>