2010-11-22 57 views
0

我按照這個線程這裏給出的答案:Access codebehind variable in XAML綁定的RenderTransform元素代碼隱藏變量

這裏就是我想要做的事:

<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

我認爲你應該讓SvgPreview實現INotifyPropertyChanged,將它設置爲你矩形的一些父類的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; 
} 

,幷包含您的矩形在Windows /頁/控制的CodeBehehind;

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

我很困惑。我沒有任何這樣的方法稱爲「OnNotifyPropertyChanged」 – 2010-11-22 07:48:57

+0

+ 1,我剛剛添加了相同的示例:) – 2010-11-22 07:49:24

+0

@Adam:對不起,它看起來像這樣:public void OnPropertyChanged(String propertyName){if(PropertyChanged!= null)PropertyChanged(this,new PropertyChangedEventArgs(propertyName)); } – Jens 2010-11-22 07:49:54