WPF日历标题背景

时间:2018-10-04 10:55:13

标签: wpf xaml .net-4.5

我为Calendar创建了一个自定义样式,似乎我得到了除标题颜色(背景)以外的所有内容,找不到其他更改方式。此背景在日,月和年视图中可见。

Calendar

到目前为止,我已经提取了4个模板(在Blend中),并且没有从所有模板中粘贴代码(它是默认模板),我将展示如何以日历样式引用它们:

 <Style x:Key="CustomCalendarStyle" TargetType="{x:Type Calendar}">
   <Setter Property="CalendarButtonStyle"
           Value="{StaticResource CustomCalendarButtonStyle}" />
   <Setter Property="CalendarDayButtonStyle"
           Value="{StaticResource CustomCalendarDayButtonStyle}" />
   <Setter Property="Template">
     <Setter.Value>
       <ControlTemplate TargetType="{x:Type Calendar}">
         <Grid x:Name="PART_Root">
           <CalendarItem x:Name="PART_CalendarItem"
                         BorderBrush="{TemplateBinding BorderBrush}"
                         BorderThickness="{TemplateBinding BorderThickness}"
                         Background="{TemplateBinding Background}"
                         Style="{DynamicResource CustomCalendarItemStyle}" />
         </Grid>
       </ControlTemplate>
     </Setter.Value>
   </Setter>
 </Style>

如果我们假设所有这四个代码均具有默认的xaml代码,那么有人知道这一背景设置在哪儿(2018年11月之后的代码)吗?似乎没有设置这3种样式(CalendarButtonStyle,CalendarDayButtonStyle,CalendarItemStyle ...)。

我发现了一种“肮脏”的方法,可以通过将CalendarItemStyle模板的外部边框设置为“透明”(基本上设置整个日历背景),然后在添加PART_HeaderButton,PART_PreviousButton和PART_NextButton。

我非常想知道背景的原始风格在哪里。有人玩过日历风格吗?

1 个答案:

答案 0 :(得分:0)

这是通过Background控件的Calendar属性设置的。如果您是从 Blend Visual Studio 编辑Template本身的Control的;你会得到的,

<Style x:Key="CalendarStyle1" 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="#FFE4EAF0" Offset="0"/>
                <GradientStop Color="#FFECF0F4" Offset="0.16"/>
                <GradientStop Color="#FFFCFCFD" Offset="0.16"/>
                <GradientStop Color="#FFFFFFFF" Offset="1"/>
            </LinearGradientBrush>
        </Setter.Value>
    </Setter>
    <Setter Property="BorderBrush">
        <Setter.Value>
            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                <GradientStop Color="#FFA3AEB9" Offset="0"/>
                <GradientStop Color="#FF8399A9" Offset="0.375"/>
                <GradientStop Color="#FF718597" Offset="0.375"/>
                <GradientStop Color="#FF617584" 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>

LinearGradientBrush设置的Background定义了标题背景颜色。不确定为什么要以这种方式实施;就是这样