none
Promebla con el Binding RRS feed

  • Pregunta

  • Hola estoy haciendo un control de usuario en el cual expongo dos propiedades LightColor y DarkColor que quiero enlazarlas al grasdiente
    el xaml de este codigo

    <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>

    Las propiedades las tengo definidas


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

    No consigo que se refresquen los valores en el gradiente que me falla?
    sábado, 11 de julio de 2009 11:32

Respuestas

  • Hola no te refresca los valores porque tienes que implementar la interfaz INotifyPropertyChanged, aqui te dejo un ejemplo

    public partial class _3DEllipse : INotifyPropertyChanged
    {

       
    private Color _lightColor;


       
    public _3DEllipse()
       
    {
           
    InitializeComponent();
       
    }

        
        public event PropertyChangedEventHandler PropertyChanged;

       
    public Color DarkColor { get; set; }
       
    public Color LightColor
       
    {
           
    get { return _lightColor; }
           
    set
           
    {
               
                if ( _lightColor == value )
               
    {
                   
    return;
               
    }

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

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

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

    Ahora si deberia funcionar

    Oscar Avarez Guerras - Arquitecto Software en I3B (I+D+I) Blog:http://geeks.ms/blogs/oalvarez Por favor marca como respuesta si te ha ayudado esta respuesta
    • Marcado como respuesta redri sábado, 11 de julio de 2009 11:56
    sábado, 11 de julio de 2009 11:43

Todas las respuestas

  • Hola no te refresca los valores porque tienes que implementar la interfaz INotifyPropertyChanged, aqui te dejo un ejemplo

    public partial class _3DEllipse : INotifyPropertyChanged
    {

       
    private Color _lightColor;


       
    public _3DEllipse()
       
    {
           
    InitializeComponent();
       
    }

        
        public event PropertyChangedEventHandler PropertyChanged;

       
    public Color DarkColor { get; set; }
       
    public Color LightColor
       
    {
           
    get { return _lightColor; }
           
    set
           
    {
               
                if ( _lightColor == value )
               
    {
                   
    return;
               
    }

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

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

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

    Ahora si deberia funcionar

    Oscar Avarez Guerras - Arquitecto Software en I3B (I+D+I) Blog:http://geeks.ms/blogs/oalvarez Por favor marca como respuesta si te ha ayudado esta respuesta
    • Marcado como respuesta redri sábado, 11 de julio de 2009 11:56
    sábado, 11 de julio de 2009 11:43
  • Gracias era como tu dices, no conseguia resolverlo
    sábado, 11 de julio de 2009 11:56