首页 > 解决方案 > 日历样式不影响 DatePicker 日历

问题描述

我添加了以下样式资源来自定义我的 DatePicker 日历的外观。日历也受到影响,但不是 DatePicker 的日历。见附图。

<Style TargetType="{x:Type Calendar}">
    <Setter Property="Foreground" Value="#FF333333"/>
    <Setter Property="Background">
        <Setter.Value>
            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                <GradientStop Color="Orange" Offset="0"/>
                <GradientStop Color="Orange" Offset="0.16"/>
                <GradientStop Color="White" Offset="0.16"/>
                <GradientStop Color="White" Offset="0.4"/>
            </LinearGradientBrush>
        </Setter.Value>
    </Setter>
    <Setter Property="BorderBrush">
        <Setter.Value>
            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                <GradientStop Color="Orange" Offset="0"/>
                <GradientStop Color="Orange" Offset="0.375"/>
                <GradientStop Color="Orange" Offset="0.375"/>
                <GradientStop Color="Orange" Offset="1"/>
            </LinearGradientBrush>
        </Setter.Value>
    </Setter>
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Calendar}">
                <StackPanel x:Name="PART_Root" HorizontalAlignment="Center">
                    <CalendarItem x:Name="PART_CalendarItem" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Style="{TemplateBinding CalendarItemStyle}"/>
                </StackPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

日历样式

标签: c#wpf

解决方案


在查看原始默认值Style时,DatePicker您会看到StyleforCalendar被显式分配给 dedicated DatePicker.CalendarStyle。这是有道理的,因为其目的是将 限制StyleCalendarDatePicker。它通常不适用于Calendar控制。

所以你必须覆盖显式的 default Style
鉴于您的隐式Style在 范围内DatePicker,您只需设置DatePicker.CalendarStyle属性以引用它:

<DatePicker CalendarStyle="{StaticResource {x:Type Calendar}}" />

推荐阅读