Привязать элементы RenderTransform к переменным выделенного кода - PullRequest
0 голосов
/ 22 ноября 2010

Я слежу за ответами, приведенными в этой теме: Доступ к переменной codebehind в XAML

Вот что я пытаюсь сделать:

<Rectangle Name="MyRect" Fill="AliceBlue" MouseDown="Rectangle_MouseDown">
    <Rectangle.RenderTransform>
        <TransformGroup>
            <RotateTransform Angle="0" CenterX="300" CenterY="150"/>
            <TranslateTransform X="{DynamicResource TransX}" Y="0"/>
        </TransformGroup>
    </Rectangle.RenderTransform>
</Rectangle>

Затем в моем коде есть переменная, которая меняется.Он называется TransX, и я добавляю его в качестве ресурса:

public double TransX = 0;

public SvgPreview()
{
    InitializeComponent();
    SvgPreview1.Resources.Add("TransX", TransX);
}

Прямоугольник действительно преобразуется должным образом с самого начала, однако преобразования не отображаются повторно, чтобы отразить изменения в переменной TransX.Что мне делать?

Кроме того, я должен сделать то же самое для нескольких других значений.

1 Ответ

1 голос
/ 22 ноября 2010

Я думаю, вы должны заставить SvgPreview реализовать INotifyPropertyChanged, установить его как DataContext некоторого родителя вашего Rectangle, а также изменить TransX на свойство и получить к нему доступ через DataBinding.

Редактировать: Например:

<Rectangle Name="MyRect" Fill="AliceBlue" MouseDown="Rectangle_MouseDown"> 
    <Rectangle.RenderTransform> 
        <TransformGroup> 
            <RotateTransform Angle="0" CenterX="300" CenterY="150"/> 
            <TranslateTransform X="{Binding TransX}" Y="0"/> 
        </TransformGroup> 
    </Rectangle.RenderTransform> 
</Rectangle> 


class SvgPreview : INotifyPropertyChanged
// ......
private double transX;
public double TransX
{
    get { return transX; }
    set 
    {
        if(transX != value)
        {
            transX = value;
            OnNotifyPropertyChanged("TransX"); 
        } 
    }
}                

public SvgPreview() 
{ 
    InitializeComponent(); 
    TransX = 0;
}

и в CodeBehehind окна / страницы / элемента управления, содержащего ваш прямоугольник;

// ...
InitializeCompenent();
this.DataContext = new SvgPreview();
// ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...