WPF的日期选择器没有使用Material Design的样式。

3

我正在我的WPF项目中使用MaterialDesignThemes,我能够看到各种WPF控件使用了MaterialDesign样式。然而,在特定的情况下,我尝试让DatePicker使用MaterialDesign样式时遇到了很大的困难。当我在XAML视图中呈现DatePicker时,它按预期工作。不同之处在于,当它不起作用时,日期选择器是在代码后台呈现的。以下是我的代码。有人能帮忙吗?

var dp = new DateControl()
{
     Margin = new Thickness(0, 0, _fontSize, 0),
     HorizontalAlignment = HorizontalAlignment.Left,
     Question = q,
     IsReadOnly = IsReadOnly || q.IsReadOnly
};
if (dataValue != null)
{
     DateTime dt = DateTime.MinValue;
     if (DateTime.TryParse(dataValue, out dt) && dt > DateTime.MinValue)
     {
           dp.SetSelectedDate((DateTime?)dt);
    }
    else
    {
         dp.Text = dataValue;
    }
}
if (!IsReadOnly)
    dp.AddHandler(DateControl.LostFocusEvent, new RoutedEventHandler(HandleUserResponse));

MaterialDesignThemes.Wpf.ColorZoneAssist.SetMode(dp, ColorZoneMode.PrimaryDark);

return dp;

什么是“DateControl”? - mm8
DateControl是继承自DatePicker的一个类。如果我直接实例化DatePicker,则样式显示正常。当我不这样做时,它似乎想使用默认的Windows系统控件。 - georgehatzi
1个回答

3
你需要设置自定义控件的Style属性:
dp.Style = FindResource("MaterialDesignDatePicker") as Style;

MaterialDesignThemes 不知道什么是 DateControl,并且不会自动为此类控件应用任何样式。应用于 DatePicker 控件的隐式样式不会被继承。


1
谢谢mm8!这就解决了。由于声望点数不足,我无法为您的答案投票,但是一旦我有足够的声望点数,我将返回所有我的问题并投票给正确的答案。再次感谢您指出这一点。正如您在我的原始代码中所看到的,我尝试设置样式,但我完全错了。 - georgehatzi
1
谢谢您向我展示如何接受答案! - georgehatzi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接