2013-12-21 30 views
0

設置呈現大小:使用數據我使用了我的AppBatButton下一個代碼在XAML綁定

<AppBarButton Icon="Play" Label="Play" Click="btn_Click"> 
    <AppBarButton.RenderTransform> 
     <CompositeTransform ScaleX="{Binding Path=ButtonsRenderSize}" ScaleY="{Binding Path=ButtonsRenderSize}"/> 
    </AppBarButton.RenderTransform> 
    </AppBarButton> 

其中ButtonsRenderSize是在頁面的C#部分聲明的變量:

public static double ButtonsRenderSize { get; set; } 

    public MainPage() 
    { 

     InitializeComponent(); 

     ButtonsRenderSize = 0.75; 
    } 

問題是綁定不起作用。 RenderSize保持爲1.如果沒有綁定,它會起作用,但當窗口不處於全屏模式時,我需要修改代碼中的RenderSize,並且我有多個按鈕,所以綁定聲音是最好的想法。

回答

1

爲了使您的作品的結合,需要進行以下步驟:

  1. 的的MainPage的DataContext設置給它自己,所以你可以在代碼中綁定控件的屬性,屬性後面。
  2. 實施INotifyPropertyChanged並在每次提供屬性新值時引發PropertyChanged事件。隨着這種變化,即時的財產價值將影響到控制的屬性。

例子:

public partial class MainPage : PhoneApplicationPage, INotifyPropertyChanged 
{ 
    public MainPage() 
    { 
     InitializeComponent(); 
     this.DataContext = this; 
     ButtonsRenderSize = 0.75; 
    } 

    private double _buttonsRenderSize; 
    public double ButtonsRenderSize 
    { 
     get { return _buttonsRenderSize; } 
     set 
     { 
      if(value != _buttonsRenderSize) 
      { 
       _buttonsRenderSize = value; 
       //raise propertychanged event to notify UI's property to update it's value 
       OnPropertyChanged("ButtonsRenderSize"); 
      } 
     } 
    } 

    #region INotifyPropertyChanged implementation 
    public event PropertyChangedEventHandler PropertyChanged; 

    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 
    } 
    #endregion 
} 
+0

大,evything似乎只要我使用的內部空隙OnPropertyChanged(字符串propertyName的)工作。虛擬生成一個錯誤,並保護警告,但如果我明顯使用內部沒有問題。非常感謝您的回答! :)一個問題,但:我可以移動OnPropertyChanged和#region和#endregion在另一個類之間的所有行(只是爲了更好的代碼管理)?如果是,我需要實現:僅在該類上使用INotifyPropertyChanged,對嗎? – TheQuestioner

+1

是的,您可以創建一個實現INotifyPropertyChanged的基類,然後使用類來綁定繼承基類,這樣您就不必在每個位置重新實現INotifyPropertyChanged。但通常的做法是那些綁定的類不是背後的代碼,它通常是視圖模型。通過創建視圖模型,您更接近實現[Model-View-ViewModel Pattern](http://msdn.microsoft.com/zh-cn/library/windowsphone/develop/gg521153%28v=vs.105%29.aspx) 。這是圍繞WP和WPF廣泛使用的模式,我建議研究它。 – har07

相關問題