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>

では、なぜ{Binding MyDp, ElementName=Uc}機能しないのでしょうか。また、この場合はどうすればよいでしょうか。

4

1 に答える 1

3

それが機能しない理由はFill、タイプのプロパティにバインドしているためです。代わりに、タイプのプロパティを取得する必要がありColorます。これは、raw xamlを使用するときに処理される変換です。つまり、ランタイムを配置すると、指定した色の名前から実際にが作成されます。FillBrushFill="Red"SolidColorBrush

コントロールを変更して、プロパティをaにするか、設定している色からBrushを自動作成する必要があります。Brush

プロパティをマークアップできる属性があり、この変換を使用する必要があることをXamlに示唆しますが、それが何であるかをすぐに思い出すことはできません。(後で見つけたら編集します。)

于 2012-12-22T09:57:06.000 に答える