2010-07-02 5 views
1

Je crée propriété de dépendance dans ma classe controll personnalisée DataPoint:Impossible de modifier propriété dans le style

public abstract class DataPoint : Control 
{ 
     public Color BaseColor 
     { 
      get { return (Color)GetValue(BaseColorProperty); } 
      set { SetValue(BaseColorProperty, value); } 
     } 

     public static readonly DependencyProperty BaseColorProperty = 
      DependencyProperty.Register("BaseColor", typeof(Color), typeof(DataPoint), new UIPropertyMetadata(Colors.DarkRed)); 

    // Other class stuff 
} 

Puis-je créer d'autres AreaDataPoint de contrôle personnalisé héritant DataPoint:

public class AreaDataPoint : DataPoint 
{ 
     static AreaDataPoint() 
     { 
      DefaultStyleKeyProperty.OverrideMetadata(typeof(AreaDataPoint), new FrameworkPropertyMetadata(typeof(AreaDataPoint))); 
     } 

    // Other class stuff 
} 

En XAML je m essayant d'attribuer une valeur à la propriété BaseColor, mais cela ne fonctionne pas

<Style TargetType="{x:Type local1:AreaDataPoint}"> 
    <Setter Property="BaseColor" Value="DarkGreen" /> 
</Style> 
+0

Que voulez-vous dire par "ça ne marche pas". Pouvez-vous nous montrer les messages d'erreur, les exceptions, ou les mauvais résultats, etc? –

Répondre

0

Vous définissez la propriété "Background", pas la propriété "BaseColor"?

<Style TargetType="{x:Type local1:AreaDataPoint}"> 
    <Setter Property="BaseColor" Value="DarkGreen" /> 
</Style> 

Gardez à l'esprit que vous pourriez avoir besoin d'un convertisseur pour prendre la chaîne DarkGreen et le convertir en un Color instsance.

+0

J'avais tort à xaml. Le nom de la propriété est BaseColor. Mais ça ne marche pas non plus. – rotor

+0

Comme je l'ai dit, vous pouvez avoir besoin d'un convertisseur pour prendre la valeur de "DarkGreen" et le convertir en couleur. Une façon de le tester est de changer le type de votre DependencyProperty en une chaîne et voir si le setter est appelé. –

+0

Les couleurs nommées et SolidColorBrushes dans XAML sont automatiquement converties. –

0

Comment déterminez-vous que cela "ne fonctionne pas". À partir de ce qui est dans votre code, tout est correct, donc vous pouvez faire quelque chose ailleurs qui provoque la perte de la valeur Style. Êtes-vous en train de définir une valeur locale pour BaseColor quelque part dans le code ou XAML? Avez-vous vérifié que l'endroit où vous utilisez la propriété BaseColor tire réellement la valeur correctement? Il n'est pas courant d'utiliser une couleur directement - la plupart des situations (avant-plan, arrière-plans, remplissages de forme) utilisent des pinceaux donc je vérifierais cela aussi.

Questions connexes