2011-12-26 125 views
3

我有一個Canvas其上有一些圖像(24x24的大小),我也有一個滾動條放大和縮小畫布。綁定縮放值來控制尺寸

我想在調整畫布大小時使圖像保持相同大小,所以我想將圖像的寬度/高度綁定到縮放值,以使它們的寬度/高度取決於縮放值(So ,例如,他們將Width = Width/ZoomValue或類似的東西)

我怎樣才能獲得這種行爲使用WPF和綁定?

謝謝!

+0

我也想過在我的圖像上應用一個'ScaleTransform',它將綁定到縮放值並且是'1/ZoomValue' – 2011-12-26 16:25:28

回答

2

假設圖像都具有24的寬度,結合ZoomValue和使用的IValueConverter:
(ZoomValue必須是在你的視圖模型)

<Image Source="..." Width="{Binding ZoomValue, Converter={StaticResource ZoomToWidthConverter}" /> 

而的IValueConverter:

public class ZoomToWidthConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      Double imgOriginalWidth = 24; 
      return imgOriginalWidth/System.Convert.ToDouble(value); 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      Double imgOriginalWidth = 24; 
      return System.Convert.ToDouble(value) * imgOriginalWidth; 
     } 
} 

畫布的資源必須包含ZoomToWidthConverter的關鍵字:

<Canvas> 
<Canvas.Resources> 
<local:ZoomToWidthConverter x:Key="ZoomToWidthConverter " /> 
</Canvas.Resources> 
</Canvas> 

如果圖像可能具有不同的原始寬度,請使用MultiBinding和IMultiValueConverter。

+0

偉大的答案和示例,非常感謝!:)聖誕快樂! – 2011-12-26 12:19:39

+0

祝你聖誕快樂=) – 2011-12-26 12:21:40

1

出發點是定義你會在綁定使用轉換器,這裏有一些鏈接,可能是有用的:

  1. http://www.wpftutorial.net/ValueConverters.html
  2. http://blogs.imeta.co.uk/FMoreno/archive/2008/11/07/498.aspx

希望這有助於!

+0

謝謝!將嘗試這些!你有針對我的問題的更具體的代碼示例嗎?這就是我最好的學習方式 – 2011-12-26 12:14:56

+0

我自己並沒有這樣做(意思是我自己沒有創建一個轉換器,我已經使用了內置的一個(boolToVisConverter),所以我沒有任何。請看下面的狒狒回答,他已發佈創建轉換器的代碼! – SpeedBirdNine 2011-12-26 12:19:27

+1

感謝您的協助,thx! – 2011-12-26 12:21:43

1

不是很確定,如果在這個主題上已經有一些內置的完成,已經在WPF 4.0,也導致這個功能很久以前被用戶請求。您可以申請的唯一有價值的解決方案是將您的childcontrol.RenderTransform指定爲的逆,其transformation matrix爲其父項,因此canvas

讓數據綁定分配正確的值

通過這樣做,希望你重新應用到畫布轉型,並得到了「老」矩陣很明顯。考慮到你正在談論一個單一轉型(沒有Translation,ScaleRotation作出序列),你必須得到數學上可預測(如此正確)的「原始」矩陣(他們稱之爲Identity)。

this答案,它又指另一個答案。

希望這會有所幫助。

+0

感謝您的信息! – 2011-12-26 12:19:59