1

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>

So why {Binding MyDp, ElementName=Uc} doesn't work and what to do in this case?

4

1 回答 1

3

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

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

您可以使用一个属性来标记您的属性,该属性会向 Xaml 提示应该使用此转换,但我不记得它是什么。(如果我以后能找到它,我会编辑它。)

于 2012-12-22T09:57:06.000 回答