2010-07-06 15 views
8

Ho appena iniziato WPF questa mattina, quindi questa è (si spera) una domanda facile da risolvere. Ho iniziato a creare un pulsante con uno sfondo sfumato. Voglio dichiarare i colori di inizio e fine del gradiente nella proprietà del controllo e quindi applicarli nel modello. Sto avendo problemi a ottenere il codice per compilare però. L'eccezione che sto ricevendo è che la xaml mi sta dicendo che la proprietà non è accessibile ma quando cambio il modificatore visiblity in pubblico si lamenta che non riesce a trovare la proprietà statica ...Aggiunta di proprietà al controllo WPF personalizzato?

Ecco il mio xaml finora :

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

Ed ecco il codice per il mio controllo personalizzato:

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: Ecco l'eccezione della fase di progettazione mi sto

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

risposta

9

ho capito ... questo:

static DependencyProperty GradientStartProperty; 
static DependencyProperty GradientEndProperty; 

bisogno di essere cambiato in questo:

public static DependencyProperty GradientStartProperty; 
public static DependencyProperty GradientEndProperty; 
Problemi correlati