我有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。
答案 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);
}
}
}
日历事件,并在处理程序中设置所需的属性值。此事件在弹出窗口打开后发生,因此将保留所需的模式。