将RenderTransform元素绑定到代码隐藏变量

时间:2010-11-22 07:11:32

标签: c# wpf xaml transform

我正在遵循此主题中给出的答案:Access codebehind variable in 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 个答案:

答案 0 :(得分:1)

我认为您应该使SvgPreview实现INotifyPropertyChanged,将其设置为Rectangle的某个父级的DataContext,并将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;
}

并在包含Rectangle的Windows / Page / Control的CodeBehehind中;

// ...
InitializeCompenent();
this.DataContext = new SvgPreview();
// ...