我是WPF自定义控件的新手,并且已经开始使用基本的“LabelEdit” - 基本上是Label控件和TextBox。我有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完成它的工作。非常感谢。