2009-07-08 68 views
1

我的問題肯定是在我的臉上正確的,但我不能看到它... ...WPF - 在簡單的用戶控件綁定

我建立一個非常簡單的用戶控制 - 三維橢圓 - 我揭露了兩個屬性:LightColor和DarkColor。我需要將這些屬性綁定到用戶控件中的漸變中,但它根本不顯示任何顏色。這裏是我的用戶:

<UserControl 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
xmlns:local="clr-namespace:TestBrushes" 
mc:Ignorable="d" 
x:Class="TestBrushes._3DEllipse" 
x:Name="UserControl" 
d:DesignWidth="200" d:DesignHeight="200"> 
    <Grid x:Name="LayoutRoot"> 
     <Ellipse Name="MainEllipse" Stroke="{x:Null}"> 
      <Ellipse.Fill> 
       <RadialGradientBrush GradientOrigin="0.5,1.1"> 
        <GradientStop Color="{Binding ElementName=UserControl, Path=LightColor}" Offset="1"/> 
        <GradientStop Color="{Binding ElementName=UserControl, Path=DarkColor}" Offset="0"/> 
       </RadialGradientBrush> 
      </Ellipse.Fill> 
     </Ellipse> 
     <Ellipse Name="TopReflectionEllipse" Stroke="{x:Null}" Margin="38,0,38,0" VerticalAlignment="Top" Height="90"> 
      <Ellipse.Fill> 
       <RadialGradientBrush GradientOrigin="0.5,0"> 
        <RadialGradientBrush.RelativeTransform> 
         <TransformGroup> 
          <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1" ScaleY="1"/> 
          <SkewTransform AngleX="0" AngleY="0" CenterX="0.5" CenterY="0.5"/> 
          <RotateTransform Angle="0" CenterX="0.5" CenterY="0.5"/> 
          <TranslateTransform X="0" Y="0"/> 
         </TransformGroup> 
        </RadialGradientBrush.RelativeTransform> 
        <GradientStop Color="#A5FFFFFF" Offset="0"/> 
        <GradientStop Color="#00FFFFFF" Offset="1"/> 
       </RadialGradientBrush> 
      </Ellipse.Fill> 
     </Ellipse> 
    </Grid> 
</UserControl> 

,這裏是我的代碼隱藏:

public partial class _3DEllipse 
{ 
    public _3DEllipse() 
    { 
     InitializeComponent(); 
    } 

    public Color DarkColor { get; set; } 
    public Color LightColor { get; set; } 
} 

如果我指定的顏色,而不是在代碼中顯示約束力,但它工作正常,但我想使用屬性我正在曝光。我究竟做錯了什麼?

謝謝!

回答

3

您的問題很可能是您沒有通知UserControl對DarkColor和LightColor屬性值所做的更改。爲此,您需要實現INotifyPropertyChanged界面。此接口的目的是使UI組件知道它們綁定的值何時更新;他們訂閱通過實現接口公開的PropertyChanged事件。

下面是一個示例實現,我已經單獨使用了DarkColor屬性,但它會以相同的方式進行更新。

public partial class _3DEllipse : INotifyPropertyChanged 
{ 

    private Color _lightColor; 


    public _3DEllipse() 
    { 
     InitializeComponent(); 
    } 

    // interface implementation 
    public event PropertyChangedEventHandler PropertyChanged; 

    public Color DarkColor { get; set; } 
    public Color LightColor 
    { 
     get { return _lightColor; } 
     set 
     { 
      // only update value if its changed 
      if (_lightColor == value) 
      { 
       return; 
      } 

      _lightColor = value; 
      OnPropertyChanged("LightColor"); 
     } 
    } 

    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged == null) return; 

     PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 
+0

是的,你說得對。我知道它正盯着我的臉。謝謝!!! – 2009-07-08 06:28:33