WPF UserControl - 边缘行为不端

时间:2012-09-11 06:31:13

标签: wpf visual-studio-2010 xaml user-controls

我是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完成它的工作。非常感谢。

0 个答案:

没有答案