wpf - 在 WPF 用户控件中重新设置所有 DatePickerTextBox 的样式
问题描述
我有一个包含多个 DatePicker 的 UserControl;
目前,为了重新设计选择器,我必须复制相同的大量模板四次:
<UserControl.Resources>
... Unrelated ResourceDictionaries...
</UserControl.Resources>
<Grid>
<StackPanel>
<DatePicker x:Name="StartDate" ...various properties...>
<DatePicker.Resources>
<Style TargetType="{x:Type DatePickerTextBox}">
<Setter Property="Background" Value="{StaticResource BackgroundBrush}>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DatePickerTextBox">
... Ridiculous amount of XML...
<ContentControl x:Name="PART_Watermark" ...more props...>
<ContentControl.Template>
<ControlTemplate>
<TextBlock Text="Start Date"/> <!-- This is the crucial change I want -->
</ControlTemplate>
</ContentControl.Template>
</ContentControl>
...Yet more XML...
</ControlTemplate>
</Setter.Value>
</Setter Property="Template">
</Style>
</DatePicker.Resources>
</DatePicker>
<!-- Duplicate for end -->
<DatePicker x:Name="EndDate" ...various properties...>
<DatePicker.Resources>
<Style TargetType="{x:Type DatePickerTextBox}">
<Setter Property="Background" Value="{StaticResource BackgroundBrush}>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DatePickerTextBox">
... Ridiculous amount of XML...
<ContentControl x:Name="PART_Watermark" ...more props...>
<ContentControl.Template>
<ControlTemplate>
<TextBlock Text="End Date"/> <!-- This is the crucial change I want -->
</ControlTemplate>
</ContentControl.Template>
</ContentControl>
...Yet more XML...
</ControlTemplate>
</Setter.Value>
</Setter Property="Template">
</Style>
</DatePicker.Resources>
</DatePicker>
<!-- Duplicate for prev start -->
<DatePicker ...>
... Same massive XML as above
</DatePicker>
<!-- Duplicate for prev end -->
<DatePicker ...>
... Same massive XML as above
</DatePicker>
</StackPanel>
</Grid>
我已经尝试在 UserControl.Resources 中创建一个<Style TargetType="{x:Type DatePickerTextBox}></Style>
来替换它,但我无法获取它。
另外,我找不到将一段不同的文本绑定到 DatePicker 的父属性的方法。
是否可以使用相同的样式重新设置所有 4 个 DatePicker 文本框但更改了一个(深度嵌套)字符串?
解决方案
您在 Datepicker.Resources 下拥有自己的风格。样式总是由他们父母的资源而不是他们自己的资源来挑选的。将该样式放在层次结构中的其他位置。例如,Grid.Resources。
推荐阅读
- mongodb - spring mongoRepository 按时间查找
- data-structures - 在用于线性探测的数组已满后添加元素
- unity3d - 当父对象为新父对象时,如何自由(内部)移动子对象?
- pytorch - LibTorch 中的固定内存
- kotlin - 在 Kotlin 中实现继承时,是否可以封装 open 和 override 变量以防止从 main() 函数直接访问?
- rancher - etcd 备份到内部 S3
- javascript - 为什么我需要在 JavaScript 的“setTimeout”中传递匿名函数?
- android - 将形状设置为 ImageView 背景以获得圆角
- three.js - 三.JS | GLSL 降档多边形 GLSL 粒子
- javascript - React JS:“消息”未定义 react/jsx-no-undef