Как добавить свойство зависимости к изображению в WPF? - PullRequest
0 голосов
/ 29 января 2010

Как мне добавить свойство, называемое весом, к изображению и использовать его так:?

myImage.weight

(при условии, что я уже определил myImage в XAML)

вот мой код:

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

здесь последняя строка не работает, потому что свойство Weight не прикрепляется к myImage.

Это ниже также не работает в XAML:

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

Ответы [ 2 ]

2 голосов
/ 29 января 2010

Вам необходимо создать прикрепленное свойство:

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

Затем вы можете использовать это в XAML, как показано ниже:

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

Я бы вообще добавил прикрепленное свойство к чему-то отличному от MainWindow.

Затем вы можете получить доступ к значению свойства в коде через:

    double weight = (double)myImage.GetValue(MainWindow.Weight);
    myImage.SetValue(MainWindow.Weight, 123.0);
0 голосов
/ 29 января 2010

Я бы порекомендовал просто унаследовать класс Image и добавить новое свойство зависимостей.

Например.

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

}

Затем в вашем коде XAML с этим локальным пространством имен:

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

вы можете использовать:

<local:MyImage Weight="10.0"/>

Это немного громоздко, но я думаю, что это дает вам максимальный контроль.

...