2012-07-07 34 views
0

我創建用戶控制,這是我要綁定的屬性的代碼是:一個綁定到用戶的控制工程,第二個沒有

public Color Value 
{ 
    get 
    { 
     return (Color)this.GetValue(this.ValueProperty); 
    } 
    set 
    { 
     this.SetValue(this.ValueProperty, value); 
    } 
} 

public readonly DependencyProperty ValueProperty = 
    DependencyProperty.Register("Value", typeof(Color), 
    typeof(ColorSlider), new PropertyMetadata(Colors.Red)) 

我有這個控制在我的頁面的兩個實例:

<local:ColorSlider x:Name="ColorsSlider1" /> 
<!--...--> 
<local:ColorSlider x:Name="ColorsSlider3" /> 

並控制與價值,我要綁定(從ColorSliderCanvasTextBlock):

<Canvas x:Name="TileCanvas" Grid.Column="0" Margin="30" Width="173" Height="173" 
     Background="{Binding Value, ElementName=ColorsSlider1, Converter={StaticResource ColorToSolidBrushConverter}}"> 
    <TextBlock x:Name="TileText" Text="dsdfsdfsf" 
       Foreground="{Binding Value, ElementName=ColorsSlider3, Converter={StaticResource ColorToSolidBrushConverter}}"/> 
</Canvas> 

所以這裏是問題所在。綁定到Canvas的作品,但綁定到TextBlock不!有趣的是,如果我刪除ColorSlider3綁定到TextBlock將工作!如果我將綁定設置爲ColorSlider3,綁定將更新TextBlock背景。

因此,我似乎只能綁定一個UserControl的最新實例的值。爲什麼會出現這種情況,我該如何解決?

回答

2

你所依賴的屬性沒有被正確定義...缺少靜態部分,而並不需要「這個」:

public Color Value 
{ 
    get 
    { 
    return (Color)this.GetValue(ValueProperty); 
    } 

    set 
    { 
    this.SetValue(ValueProperty, value); 
    } 
} 

public static readonly DependencyProperty ValueProperty = 
    DependencyProperty.Register("Value", typeof(Color), 
    typeof(ColorSlider), new PropertyMetadata(Colors.Red)); 

編輯-----------------

很高興知道它適合你。然而,真正的原因MS決定了它是靜態的...雖然它從來沒有,但根據MSDN:

「自定義依賴屬性

如果你想在你的自定義類型屬性,以支持值表達式,財產無效,每個類型的默認值,繼承,數據綁定,動畫或造型,你應該遵循這些準則和程序的依賴屬性回到這些CLR屬性:

  1. 註冊使用註冊方法的依賴屬性;此方法返回一個DependencyProperty,您應該將其存儲爲static您的班級中的只讀字段...「
+0

就是這樣!現在它完美地工作。你能簡要解釋一下DependencyProperty是靜態的時候會發生什麼變化嗎?爲什麼它現在正在工作,但是當它是非靜態的時候它不起作用? – Andrzej 2012-07-07 14:48:58

+0

順便說一下,Visual Studio包含了「propdp」片段,可以幫助您編寫自定義的依賴項屬性。 – NestorArturo 2012-07-08 14:04:20

0

看來你有它設置爲ColorsSlider2而不是ColorsSlider3

+0

我很抱歉誤導您。它應該睡'ElementName = ColorSlider3'。我在實驗之後粘貼了代碼,而不是原來的代碼。但將其更改爲ColorSlider3並不能解決問題。 – Andrzej 2012-07-07 14:44:46

相關問題