WPF 日历 header 背景
WPF Calendar header background
我已经为日历创建了一个自定义样式,似乎我得到了除了 header 颜色(背景)之外的所有内容,我找不到如何更改。此背景在日、月和年视图中可见。
到目前为止我已经提取了 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...)中似乎没有设置它。
我找到了一种 'dirty' 方法来实现这一点,方法是将 CalendarItemStyle' 模板的外边框设置为透明(这基本上设置了整个日历背景),然后在添加PART_HeaderButton、PART_PreviousButton 和 PART_NextButton。
我很好奇这个背景是哪里设置的原画。有人玩过日历样式吗?
这是从 Calendar
控件的 Background
属性 设置的。如果您从 Blend 或 Visual 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
定义了 header 背景颜色。不确定为什么以这种方式实施;就是这样。
我已经为日历创建了一个自定义样式,似乎我得到了除了 header 颜色(背景)之外的所有内容,我找不到如何更改。此背景在日、月和年视图中可见。
到目前为止我已经提取了 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...)中似乎没有设置它。
我找到了一种 'dirty' 方法来实现这一点,方法是将 CalendarItemStyle' 模板的外边框设置为透明(这基本上设置了整个日历背景),然后在添加PART_HeaderButton、PART_PreviousButton 和 PART_NextButton。
我很好奇这个背景是哪里设置的原画。有人玩过日历样式吗?
这是从 Calendar
控件的 Background
属性 设置的。如果您从 Blend 或 Visual 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
定义了 header 背景颜色。不确定为什么以这种方式实施;就是这样。