WindowsPhoneControl1.xaml.cs:
public partial class WindowsPhoneControl1
{
public static readonly DependencyProperty MyDpProperty =
DependencyProperty.Register("MyDp",
typeof (Color),
typeof (WindowsPhoneControl1),
new PropertyMetadata(default(Color)));
public Color MyDp
{
get { return (Color) this.GetValue(MyDpProperty); }
set { this.SetValue(MyDpProperty, value); }
}
...
}
WindowsPhoneControl1.xaml:
<UserControl x:Class="MyProj.WindowsPhoneControl1" x:Name="Uc" ...>
<Rectangle Width="200" Height="200" Fill="{Binding MyDp, ElementName=Uc}" />
<!--<Rectangle Width="200" Height="200" Fill="Red" /> Works fine-->
</UserControl>
MainPage.xaml中:
<Grid x:Name="LayoutRoot">
<myProj:WindowsPhoneControl1 MyDp="SandyBrown" />
</Grid>
那么为什么{Binding MyDp, ElementName=Uc}
不起作用以及在这种情况下该怎么办?
答案 0 :(得分:3)
它不起作用的原因是您将Fill
绑定到Color
类型的属性 - 而Fill
应该采用Brush
类型的属性。这是在使用原始xaml时为您处理的转换 - 也就是说,如果放置Fill="Red"
,运行时将实际从您指定的颜色名称创建SolidColorBrush
。
您应该修改您的控件,使其属性为Brush
,或者从您设置的颜色自动创建Brush
。
有一个属性可以标记你的属性,这将暗示Xaml应该使用这个转换,但我不记得它是什么。 (如果我以后可以找到,我会编辑。)