【问题标题】:WPF Datepicker Calendar Style BugWPF 日期选择器日历样式错误
【发布时间】:2015-11-03 14:46:35
【问题描述】:

我正在开发一个 WPF 应用程序并且我正在使用标准的 WPF Datepicker。

这是 XAML 代码:

<DatePicker Grid.Column="0" Grid.Row="5" Margin="5,0,5,12"
  x:Name="SendungDatePicker" SelectedDate="{Binding Path=ProduktionsDatum}"
  ToolTip="{x:Static resx:MetaData.DateTooltip}" />

但是,当我使用它时,日历的上半部分显示不正确:

如你所见,我看不到月份和年份。

我该如何解决这个问题?

感谢您的帮助

编辑

我为日历样式生成了一个模板:

<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="White" 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}" Height="Auto" Width="Auto"/>
                    </StackPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

如何更新日历表头的高度?

【问题讨论】:

  • 您使用的主题是什么?尝试通过 Blend 生成 datepicker 主题的副本,根据您的文化显示应用日历内的控件高度。
  • @user1672994 主题是什么意思?我正在使用标准的 WPF DatePicker。
  • 我是说模板。
  • @user1672994 我没有使用任何模板
  • 然后通过Blend生成datepicker的模板,更新日历内部控件的高度。这里的问题是对于某些特定于文化的文本,日期选择器标签不显示模板中默认高度的文本。有时也会因操作系统而异。

标签: wpf xaml datepicker


【解决方案1】:

如果你为 CalendarItem 生成一个样式,那么你会发现 Header Button 的高度是 20,FontSize 是 10.5。因此,您覆盖 CalendarItem 样式并定义 PART_HeaderTemplate 的高度或减小 FontSize

<Button x:Name="PART_PreviousButton" Grid.Column="0" Focusable="False" HorizontalAlignment="Left" Height="20" Grid.Row="0" Template="{StaticResource PreviousButtonTemplate}" Width="28"/>
<Button x:Name="PART_HeaderButton" Grid.Column="1" FontWeight="Bold" Focusable="False" FontSize="10.5" HorizontalAlignment="Center" Grid.Row="0" Template="{StaticResource HeaderButtonTemplate}"  VerticalAlignment="Center"/>
<Button x:Name="PART_NextButton" Grid.Column="2" Focusable="False" HorizontalAlignment="Right" Height="20" Grid.Row="0" Template="{StaticResource NextButtonTemplate}" Width="28"/>

【讨论】:

  • 如何为 CalendarItem 生成样式?
  • 可以通过 Blend 生成。右键单击日期选择器,然后单击生成附加模板。
  • 我试过了,只能选择CalendarStyle和FocusVisualStyle。
  • 好的,我找到了方法。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-16
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 2013-03-30
  • 1970-01-01
相关资源
最近更新 更多