2012-12-22 90 views
1

WindowsPhoneControl1.xaml.cs內使用的DependencyProperty:的Windows Phone - 用戶控件XAML

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}在這種情況下工作和做什麼?

回答

3

它不工作的原因是要綁定FillColor類型的屬性 - 和Fill應改爲採取Brush類型的屬性。這是您在處理原始xaml時處理的轉換 - 也就是說,如果您將Fill="Red"運行時實際上將從您指定的顏色名稱創建SolidColorBrush

您應該修改控件以使屬性爲Brush,或者改爲使用您設置的顏色自動創建Brush

有一個屬性可以標記你的屬性,這將提示Xaml這個轉換應該被使用,但我不記得它是什麼。 (我會編輯,如果我稍後可以找到它。)