HI,
我有一个Silverlight UserControl,我将 UserControl.Background 属性绑定到其中的border元素。我找到了一种简单的方法来绑定背景:
<UserControl x:Name="root"
x:Class="TestProject.MyControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="Red" >
<Border x:Name="brdMain" Background="{Binding Path=Background, ElementName=root }" >
etc... .... ...
</Border>
问题在于我多次实例化UserControl。我收到以下错误:
Error: Unhandled Error in Silverlight Application
Code: 2028
Category: ParserError
Message: The name already exists in the tree: root.
File:
Line: 0
Position: 0
还有其他更好的方法来绑定我的Usercontrol背景属性,而不必像我那样命名我的UserControl: x:Name =“root” ?
由于
答案 0 :(得分:0)
...试
Background="{Binding Background, RelativeSource={RelativeSource AncestorType={x:Type UserControl}, Mode=FindAncestor}}"
编辑:
由于上述仅在WPF中有效(SL仅支持TemplatedParent和Self),因此可以采用不同的方法。您可以在DependencyProperty
上创建propdp
(UserControl
是Visual Studio中的IntelliSense片段),它会正确设置子Border.Background
。
我试图了解您为什么要在Background
上设置UserControl
而不是简单地在Border
上设置UserControl
并将{{1}}留空视觉姿态;允许它成为代表视觉效果的子控件的物理容器。
答案 1 :(得分:0)