wpf datepicker从日历中的年份开始

时间:2014-07-08 05:43:30

标签: c# wpf mvvm datepicker

我有standart datepicker,mvvm。

<Custom:DatePicker>
     <Custom:DatePicker.CalendarStyle>
            <Style TargetType="Custom:Calendar" >                                       
                <Setter Property="DisplayMode"  Value="Year"/>                      
            </Style>                        
     </Custom:DatePicker.CalendarStyle>
</Custom:DatePicker>

但它不起作用。我应该在xaml和DatePicker控件中有代码,而不是Calendar + TextBlock。

1 个答案:

答案 0 :(得分:0)

在打开弹出窗口之前,DatePicker控制changes DisplayMode Calendar的{​​{1}}值,这样你的风格价值就变得毫无用处。< / p>

我已经通过附加属性解决了这个问题

以下代码适用于标准Month控件

DatePicker

我创建了一个附加属性<DatePicker xmlns:l="clr-namespace:CSharpWPF"> <DatePicker.CalendarStyle> <Style TargetType="Calendar" BasedOn="{StaticResource {x:Type Calendar}}"> <Setter Property="l:CalendarHelper.DisplayMode" Value="Year" /> </Style> </DatePicker.CalendarStyle> </DatePicker> 并在样式中设置了所需的值。

CalendarHelper类

CalendarHelper.DisplayMode

在上面的课程中,我正在监听namespace CSharpWPF { public class CalendarHelper : DependencyObject { public static CalendarMode GetDisplayMode(DependencyObject obj) { return (CalendarMode)obj.GetValue(DisplayModeProperty); } public static void SetDisplayMode(DependencyObject obj, CalendarMode value) { obj.SetValue(DisplayModeProperty, value); } // Using a DependencyProperty as the backing store for DisplayMode. This enables animation, styling, binding, etc... public static readonly DependencyProperty DisplayModeProperty = DependencyProperty.RegisterAttached("DisplayMode", typeof(CalendarMode), typeof(CalendarHelper), new PropertyMetadata(CalendarMode.Month, OnModeChanged)); private static void OnModeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { Calendar cal = d as Calendar; cal.IsKeyboardFocusWithinChanged += (ss, ee) => cal.SetValue(Calendar.DisplayModeProperty, e.NewValue); } } } 日历事件,并在处理程序中设置所需的属性值。此事件在弹出窗口打开后发生,因此将保留所需的模式。