我对 WPF 自定义控件相当陌生,并开始使用基本的“LabelEdit” - 基本上是一个标签控件和一个文本框。我绑定了 4 个属性 - Text、Label、TextWidth 和 LabelWidth(可能不是您在生产环境中命名它们的名称,但这只是为了让我可以自学!)。
一切似乎运作良好。我还有一个事件,当标签的大小发生变化并导致“ActualLabelWidth”DependencyProperty 发生变化时触发,因此一系列 LabelEdit 控件都可以具有相同的标签宽度。这是 LabelEdit 的 XAML:
<Grid DataContext="{Binding RelativeSource={RelativeSource AncestorType=UserControl}}">
<Grid.RowDefinitions >
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding LabelWidth}" />
<ColumnDefinition Width="{Binding TextWidth}" />
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Grid.Row="0" Content="{Binding Label, FallbackValue=LabelEdit}" SizeChanged="Label_SizeChanged" />
<TextBox Grid.Column="1" Grid.Row="0" Text="{Binding Text}" />
</Grid>
...对于使用它的 MainWindow:
<ajdata:LabelEdit Text="{Binding Title}" Label="Title:" LabelWidth="{Binding ElementName=lblForename, Path=ActualLabelWidth}" TextWidth="100" />
<ajdata:LabelEdit Text="{Binding Surname}" Label="Surname:" LabelWidth="{Binding ElementName=lblForename, Path=ActualLabelWidth}" TextWidth="300" />
<ajdata:LabelEdit Text="{Binding Forename}" Label="Forename(s):" LabelWidth="Auto" TextWidth="300" Name="lblForename" />
因此,具有最大文本的标签设置了其他标签的宽度。
当我给 Label 一个边距(“0,0,5,0”)以将其与 TextBox 元素隔开时,就会出现问题。在这种情况下,具有“自动”宽度的 LabelEdit 似乎工作正常。然而,装订的版本似乎不尊重页边距。这意味着元素的 TextBox 部分出现在它应该在的位置的左侧。
有谁知道我需要做什么才能使所有标签最终具有相同的宽度并考虑边距?我意识到我可能会在我的事件处理程序中插入一段额外的代码,但如果可能的话,我宁愿让 XAML 完成它的工作。非常感谢。