我为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。
我非常想知道背景的原始风格在哪里。有人玩过日历风格吗?
答案 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
定义了标题背景颜色。不确定为什么要以这种方式实施;就是这样