Windows Phone - 在UserControl xaml中使用DependencyProperty

时间:2012-12-22 09:49:58

标签: c# silverlight windows-phone-7 xaml dependency-properties

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}不起作用以及在这种情况下该怎么办?

1 个答案:

答案 0 :(得分:3)

它不起作用的原因是您将Fill绑定到Color类型的属性 - 而Fill应该采用Brush类型的属性。这是在使用原始xaml时为您处理的转换 - 也就是说,如果放置Fill="Red",运行时将实际从您指定的颜色名称创建SolidColorBrush

您应该修改您的控件,使其属性为Brush,或者从您设置的颜色自动创建Brush

有一个属性可以标记你的属性,这将暗示Xaml应该使用这个转换,但我不记得它是什么。 (如果我以后可以找到,我会编辑。)