我正在尝试使用另一个SO用户提供给我的帮助程序类,以在标签上应用字符串格式。但是,当我应用他的解决方案时,我收到以下错误:
The object 'Label' already has a child and cannot add ''. 'Label' can accept only one child.
这是标签:
<Label Grid.Column="1"
Grid.Row="1">
<ui:Helper.Text>
<PriorityBinding>
<Binding Path="Worker.Employer.Name" StringFormat="Employer: {0}" />
<Binding Source="Unemployed" />
</PriorityBinding>
</ui:Helper.Text>
<Binding RelativeSource="{RelativeSource Self}" Path="(ui:Helper.Text)" />
</Label>
错误指向“Binding RelativeSource ...”行。我该怎么做才能解决这个问题?我想使用Label
代替TextBlock
s,但它已经到了可能不值得的地步。
答案 0 :(得分:2)
看起来像xaml的情况,假设您的附加属性是Content
的{{1}}
只需将您的实际Label
包装在明确的Content
<Label.Content>
答案 1 :(得分:1)
如果没有对i进行测试,我认为附加属性的定义中存在错误,因为它附加到Helper
类本身而不是Label
。这样,您只需在标签内容中创建Helper
的新实例。然后,当您将绑定添加到内容时,您将获得异常,因为已经存在内容。
我实际上并没有理由将其作为附属财产,并且绑定到自我的附属财产对我来说似乎很笨拙。
尝试以下方法;通过将RegisterAttached(...)
替换为Register(...)
,使Helper.Text成为正常的依赖项属性。 (将帮助器重命名为CompositeString
。)然后将CompositeString定义为标签的资源,并将标签的内容绑定到此资源:
<Label>
<Label.Resources>
<ui:CompositeString>
<ui:CompositeString.Text>...</ui:CompositeString.Text>
</ui:CompositeString>
</Label.Resources>
<Label.Content>
<Binding Path="Text" Source="{StaticResource Test}" />
</Label.Content>
</Label>
请注意,资源需要在绑定到内容之前定义,这就是绑定获取自己标记的原因。