2010-01-29 4 views
0

Comment puis-je ajouter ma propriété appelée poids à une image et l'utiliser comme ceci:?Comment ajouter une propriété de dépendance à une image dans WPF?

myImage.weight

(en supposant que je l'ai déjà défini myImage en XAML)

voici mon code:

public partial class MainWindow : Window 
{ 
    public double Weight 
    { 
     get 
     { 
      return (double)GetValue(WeightProperty); 
     } 
     set 
     { 
      SetValue(WeightProperty, value); 
     } 
    } 
    public static readonly DependencyProperty WeightProperty = DependencyProperty.Register("Weight", typeof(Double), typeof(Image)); 


    public MainWindow() 
    { 
     this.InitializeComponent(); 
        myImage.Weight = 2;' 

ici la dernière ligne ne fonctionne pas parce que la propriété poids ne attacher à myImage.

Ce ci-dessous ne fonctionne pas non plus en XAML:

<Image x:Name="myImage" Weight="2" /> 

Répondre

0

je recommande simplement héritant de la classe image et l'ajout de votre nouvelle propriété de dépendance.

Par exemple.

public class MyImage : System.Windows.Controls.Image 
{ 
    public double Weight 
    { 
     get { return (double)GetValue(WeightProperty); } 
     set { SetValue(WeightProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for Weight. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty WeightProperty = 
     DependencyProperty.Register("Weight", typeof(double), typeof(MyImage), new UIPropertyMetadata(0.0)); 

} 

Puis dans votre code XAML, avec cet espace de noms local:

xmlns:local="clr-namespace:[LIBRARYNAME]" 

vous pouvez utiliser:

<local:MyImage Weight="10.0"/> 

Il est un peu lourd, mais je pense que cela vous donne le plus de contrôle .

+0

Je suis curieux de savoir pourquoi le -1? Qui a voté, quel était le raisonnement? –

+1

Que se passe-t-il lorsque quelqu'un d'autre dans votre équipe crée une classe TheirImage avec la propriété "AspectRatio"? Que faire si vous avez besoin d'ajouter une fonctionnalité à la classe Panel, qui est déjà sous-classée par Grid, DockPanel, StackPanel etc? C'est pourquoi la composition est généralement meilleure que l'héritage, et WPF rend la composition vraiment puissante et facile avec les propriétés attachées –

+0

Un bon point. Bien, nous n'avons rien entendu dans la question concernant une équipe ou quoi que ce soit d'autre. Si vous avez seulement 1 propriété à faire sur 1 classe, alors pour cette question la réponse est correcte. –

2

Vous devez créer une propriété attachée:

public static double GetWeight(DependencyObject obj) 
     { 
      return (double)obj.GetValue(WeightProperty); 
     } 

     public static void SetWeight(DependencyObject obj, double value) 
     { 
      obj.SetValue(WeightProperty, value); 
     } 

     public static readonly DependencyProperty WeightProperty = 
      Dependenc**strong text**yProperty.RegisterAttached("Weight", typeof(double), typeof(MainWindow)); 

Vous pouvez alors l'utiliser dans le XAML comme ci-dessous:

<Image x:Name="myImage" MainWindow.Weight="2" /> 

Je mettrais généralement la propriété attachée sur autre chose que MainWindow.

Vous pouvez alors accéder à la valeur de la propriété dans le code par:

double weight = (double)myImage.GetValue(MainWindow.Weight); 
    myImage.SetValue(MainWindow.Weight, 123.0); 
Questions connexes