【问题标题】:WPF Calendar header backgroundWPF 日历标题背景
【发布时间】:2018-10-04 10:55:12
【问题描述】:

我为日历创建了一个自定义样式,似乎除了标题颜色(背景)之外的所有内容我都找不到如何更改。此背景在日、月和年视图中可见。

到目前为止,我已经提取了 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。

我很好奇原始风格的背景设置在哪里。有人玩过日历样式吗?

【问题讨论】:

标签: wpf xaml .net-4.5


【解决方案1】:

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

<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>

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 2018-09-09
    • 2010-12-15
    相关资源
    最近更新 更多