如何访问 WPF 模板中的控件并提供默认值
本文关键字:控件 默认值 何访问 访问 WPF | 更新日期: 2023-09-27 17:56:47
我正在努力使用控件模板。我目前正在构建一个 UI,它有几个窗格,这些窗格基本上是由更基本的控件构建的。
以下是我们的一个构造窗格现在的样子:
<Grid>
<StackPanel>
<ContentControl Template="{StaticResource ConstructionBorderCtrl}">
<ContentControl Template="{StaticResource StringCtrl}" Content="Cash Event Value:"/>
</ContentControl>
<ContentControl Template="{StaticResource ConstructionBorderCtrl}">
<ContentControl Template="{StaticResource RateCtrl}"></ContentControl>
</ContentControl>
<ContentControl Template="{StaticResource ConstructionBorderCtrl}">
<ContentControl Grid.Row="0" Template="{StaticResource FromCtrl}"></ContentControl>
</ContentControl>
<ContentControl Template="{StaticResource ConstructionBorderCtrl}">
<ContentControl Grid.Row="0" Template="{StaticResource StartEndDateCtrl}"></ContentControl>
</ContentControl>
<ContentControl Template="{StaticResource ConstructionBorderCtrl}">
<ContentControl Grid.Row="0" Template="{StaticResource ComboStringCtrl}">Applicable Size:</ContentControl>
</ContentControl>
</StackPanel>
</Grid>
下面是一个 StringCtrl 的模板作为示例:
<ControlTemplate x:Key="StringCtrl" TargetType="ContentControl">
<Grid Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Name="ctrlText" Margin="0,0,5,0" Text="{TemplateBinding Content}"></TextBlock>
<TextBox Name="ctrlDefaultValue" Grid.Column="1" />
</Grid>
</ControlTemplate>
从模板中可以看出,它实际上只是一个标签和一个文本框。现在,假设我想为文本框提供默认值并对用户输入执行验证,但我想从父构造窗格提供该上下文并将其绑定到模板内的各个元素。我该怎么做呢?
这当然是我以前从未见过的设计。我认为UserControls或其他类型的自定义控件比ControlTemplate方法更适合此。
但是,如果您肯定想走这条路,如果模板中的结构/命名具有一定的一致性,我可能会看到一个行为对您有用 - 您可以设置行为的属性,并且行为可以通过其 AssociatedObject 属性访问控件,以便能够设置子项的值并进行验证。
不过对我来说似乎有很多工作要做。