我正在遵循此主题中给出的答案: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变量的变化。我该怎么办?
另外,我必须为其他几个值做同样的事情。
答案 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();
// ...