DatePicker的CalendarStyle不同于我自定义的CalendarStyle

本文关键字:CalendarStyle 自定义 不同于 DatePicker | 更新日期: 2023-09-27 17:50:47

我有一个自定义Calendar样式和一个自定义DatePicker样式。

代码在我的MyCustomSkin。xaml (from my library project)

<Style TargetType="{x:Type Calendar}">
    <Setter Property="Background" Value="Red"/>
</Style>
<Style TargetType="{x:Type DatePicker}">
    <Setter Property="Background" Value="Green"/>
</Style>

他们都在我的MyCustomSkin。xaml ResourceDictionary(生成MyCustomSkin.dll的独立解决方案),我在应用程序中引用。

Code in my App.xaml (from my application)

<Application x:Class="WpfApplication1.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/MyCustomSkin;component/MyCustomSkin.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

主窗口中的代码。

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow">
    <Grid>
        <DatePicker HorizontalAlignment="Right" />
        <Calendar HorizontalAlignment="Left"/>
    </Grid>
</Window>

当我在应用程序中创建日历时(没有指定任何样式),背景是红色的。当我在应用程序中创建一个DatePicker(没有指定任何样式)时,背景是绿色的,但其日历的背景是系统日历(=>而不是红色)。

为什么?我以为我用我的日历覆盖了所有的系统日历。为什么它应用自定义样式的日历,而不是日历的DatePicker?

谢谢!

DatePicker的CalendarStyle不同于我自定义的CalendarStyle

你的MyCustomSkin。Xaml应该是:

<Style TargetType="{x:Type Calendar}" >
                <Setter Property="Background" Value="Red" />
            </Style>
            <Style TargetType="{x:Type DatePicker}" >
                <Setter Property="Background" Value="Green" />
                <Setter Property="CalendarStyle">
                    <Setter.Value>
                        <Style TargetType="{x:Type Calendar}" BasedOn="{StaticResource {x:Type Calendar}}"/>
                    </Setter.Value>
                </Setter>
            </Style>         

DatePicker有一个默认的CalendarStyle,它将在组件初始化时应用。