2011-12-27 16 views
3

我會請參照具體的例子這個問題,我使用的ScaleX和scaleY來實現放大和帆布縮小,XAML代碼:有沒有辦法在XAML的Binding中使用變量值和條件?

<Canvas> 
    <Canvas.LayoutTransform> 
     <ScaleTransform x:Name="scale" ScaleX="1" ScaleY="1" /> 
    </Canvas.LayoutTransform> 
</Canvas> 

然後在縮小按鈕的代碼,我寫:

if (zoomFactor > -3) 
{ 
    scale.ScaleX /= 2; 
    scale.ScaleY /= 2; 
    zoomFactor--; 
} 

這裏zoomFactor是一個私有變量,它允許最大數量的縮小可以被點擊。

我的問題是:

有沒有辦法在XAML做到這一點,即有沒有辦法來定義綁定或觸發,或基於變量的值的條件的方式寫一個轉換器被應用,並且變量的值也被更新?

此外,當zoomFactor的值爲-3或3時,可以在XAML中禁用「縮小」或「放大」按鈕嗎?或者更簡單地說,可以根據某個變量的值在XAML中禁用/啓用一個按鈕嗎?

如果是,如何?

回答

4

很多問題在這裏:是的,是的,是的。

綁定的ScaleX和scaleY到zoomFactor,然後使用實現您所提供的邏輯一的IValueConverter:

<Canvas> 
     <Canvas.LayoutTransform> 
      <ScaleTransform x:Name="scale" 
ScaleX="{Binding zoomFactor, Converter={StaticResource ZoomConverter}" 
ScaleY="{Binding ScaleX RelativeSource={RelativeSource Mode=Self}}" /> 
     </Canvas.LayoutTransform> 
    </Canvas> 

public class ZoomConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      double zoomFactor = (Double)value; 
      if (zoomFactor > -3) 
      { 
       return 1/2; 
      } 
      return 1; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 
    } 

對於第二個問題,看看DataTriggers(他們必須在樣式進行設置)。

+0

太棒了!謝謝! – SpeedBirdNine 2011-12-27 14:08:48

相關問題