C# 在模板中设置绑定属性
是否有一种方法可以在样式中模板Binding.Converter和Binding.ValidationRules 我有下面的文本框:C# 在模板中设置绑定属性,c#,wpf,xaml,C#,Wpf,Xaml,是否有一种方法可以在样式中模板Binding.Converter和Binding.ValidationRules 我有下面的文本框: <TextBox x:Name="DepartTime" Height="23" HorizontalContentAlignment="Left" HorizontalAlignment="Left" Margin="3" Width="140" Style="{D
<TextBox x:Name="DepartTime" Height="23" HorizontalContentAlignment="Left" HorizontalAlignment="Left"
Margin="3" Width="140"
Style="{DynamicResource TimeOfDayTextBox}">
<TextBox.Text>
<!-- Textbox notifies changes when Text is changed, and not focus. -->
<Binding Path="FlightDepartTime" StringFormat="{}{0:hh:mm tt}" >
<Binding.Converter>
<convert:TimeOfDayConverter />
</Binding.Converter>
<Binding.ValidationRules>
<!-- Validation rule set to run when binding target is updated. -->
<validate:ValidateTimeOfDay ValidatesOnTargetUpdated="True" />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
。。我不知道如何将转换器和验证规则合并到我的TimeOfDayTextBox样式中
非常感谢。样式只能包含一组可应用于多个控件的公共属性。在您的情况下,转换器和验证规则不是应用于文本框,而是应用于绑定的内容,因此它们特定于单个元素,不能用于样式中。不幸的是,不是。样式只能将文本属性本身设置为绑定。它无法设置绑定的属性。此外,由于绑定不是DependencyObject,因此无法设置绑定的样式 使代码更简洁的一个选项是使用自定义MarkupExtension创建所需的绑定:
public class TimeOfDayBinding
: MarkupExtension
{
public PropertyPath Path { get; set; }
public override object ProvideValue(IServiceProvider serviceProvider)
{
var binding = new Binding()
{
Path = Path,
Converter = new TimeOfDayConverter(),
};
binding.ValidationRules.Add(new ValidateTimeOfDay()
{
ValidatesOnTargetUpdated = true,
});
return binding.ProvideValue(serviceProvider);
}
}
给定控件名称,您可能还希望使用时间选择器控件而不是文本框。查看此问题:谢谢你,迈斯特。时间选择器正是我所需要的。另外,感谢您提供的标记扩展选项。这是我今天学到的其他东西。干杯