2010-07-06 35 views
8

Acabo de comenzar WPF esta mañana, así que esta es (con suerte) una pregunta fácil de resolver. Empecé creando un botón que tiene un fondo degradado. Quiero declarar los colores de inicio y final del degradado en la propiedad del control y luego aplicarlos en la plantilla. Sin embargo, estoy teniendo problemas para compilar el código. La excepción que recibo es que el xaml me está diciendo que la propiedad no es accesible, pero cuando cambio el modificador de visibilidad a público, se queja de que no puede encontrar la propiedad estática ...¿Agregar propiedades al control WPF personalizado?

Aquí está mi xaml hasta ahora :

<StackPanel> 
    <StackPanel.Resources> 
     <Style TargetType="my:GradientButton"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type my:GradientButton}"> 
         <Grid> 
          <Ellipse Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" Stroke="{TemplateBinding Foreground}" VerticalAlignment="Top" HorizontalAlignment="Left"> 
           <Ellipse.Fill> 
            <LinearGradientBrush> 
             <GradientStop Color="{TemplateBinding GradientStart}" Offset="0"></GradientStop><!--Problem on this line!!!--> 
             <GradientStop Color="{TemplateBinding GradientEnd}" Offset="1"></GradientStop> 
            </LinearGradientBrush> 
           </Ellipse.Fill> 
          </Ellipse> 
          <Polygon Points="18,12 18,38, 35,25" Fill="{TemplateBinding Foreground}" /> 
         </Grid> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </StackPanel.Resources> 
    <my:GradientButton x:Name="btnPlay" Height="50" Width="50" Foreground="Black" Click="Button_Click" GradientStart="#CCCCCC" GradientEnd="#7777777" /> 
</StackPanel> 

Y aquí está el código de mi control personalizado:

public class GradientButton : Button 
{ 
    static DependencyProperty GradientStartProperty; 
    static DependencyProperty GradientEndProperty; 

    static GradientButton() 
    { 
     GradientStartProperty = DependencyProperty.Register("GradientStart", typeof(Color), typeof(GradientButton)); 
     GradientEndProperty = DependencyProperty.Register("GradientEnd", typeof(Color), typeof(GradientButton)); 
    } 

    public Color GradientStart 
    { 
     get { return (Color)base.GetValue(GradientStartProperty); } 
     set { base.SetValue(GradientStartProperty, value); } 
    } 

    public Color GradientEnd 
    { 
     get { return (Color)base.GetValue(GradientEndProperty); } 
     set { base.SetValue(GradientEndProperty, value); } 
    } 
} 

EDIT: aquí está la excepción en tiempo de diseño que estoy recibiendo

Cannot reference the static member 'GradientStartProperty' on the type 'GradientButton' as it is not accessible. 

Respuesta

9

lo he descubierto ... Este:

static DependencyProperty GradientStartProperty; 
static DependencyProperty GradientEndProperty; 

necesitaba ser cambiado a esto:

public static DependencyProperty GradientStartProperty; 
public static DependencyProperty GradientEndProperty; 
Cuestiones relacionadas