如何解决DatetimePicker 不更新 SelectedDate
我遇到了 WPF DatePicker
的问题。
表单上有两个 DatePicker
控件,基于 StaticResource
DateTheme
。 DateTheme
看起来像:
<ResourceDictionary>
<Style TargetType="{x:Type DatePicker}" x:Key="DateTheme" >
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DatePicker}">
<DatePicker DisplayDate="{TemplateBinding Property=DisplayDate}" SelectedDate="{TemplateBinding Property=SelectedDate}" Background="#353340" Foreground="Black"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
DatePicker
只是看起来像:
<DatePicker x:Name="dtpFrom" Style="{StaticResource DateTheme}" />
<DatePicker x:Name="dtpTo" Style="{StaticResource DateTheme}" />
并且 DateTheme
包含在 app.xaml 中:
<ResourceDictionary Source="DateTheme.xaml" />
但在选择新日期并单击按钮后,代码中仍使用旧日期。 SelectedDate
不会在控件中更新。
这里的 SelectedDate
仍然是旧日期,而新选择的日期显示在屏幕上:
if (dtpFrom.SelectedDate > dtpTo.SelectedDate)
在标准 SelectedDate
控件中选择新日期时如何实际更改 DateTimePicker
?
解决方法
它不起作用,因为 TemplateBinding
不支持双向绑定。
TemplateBinding
是模板场景的 Binding 的优化形式,类似于使用 Binding
构造的 {Binding RelativeSource={RelativeSource TemplatedParent},Mode=OneWay}
。 TemplateBinding
始终是单向绑定,即使涉及的属性默认为双向绑定。
如果您改为使用与 TemplatedParent
的相对源绑定,它会起作用(但不要这样做)。
<Style TargetType="{x:Type DatePicker}" x:Key="DateTheme" >
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DatePicker}">
<DatePicker DisplayDate="{Binding DisplayDate,RelativeSource={RelativeSource TemplatedParent}}"
SelectedDate="{Binding SelectedDate,RelativeSource={RelativeSource TemplatedParent}}"
Background="#353340"
Foreground="Black"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
然而,这不是正确的方法。您不应将 DatePicker
放在控件模板中。控件模板应从基本元素构建以构成控件的视觉外观,而不是控件本身。这可能会因递归而导致错误。
在这种情况下也没有必要,因为带有两个 setter 的简单样式会得到相同的结果。
<Style TargetType="{x:Type DatePicker}" x:Key="DateTheme" >
<Setter Property="Background" Value="#353340"/>
<Setter Property="Foreground" Value="Black"/>
</Style>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。