我有一個Canvas
其上有一些圖像(24x24的大小),我也有一個滾動條放大和縮小畫布。綁定縮放值來控制尺寸
我想在調整畫布大小時使圖像保持相同大小,所以我想將圖像的寬度/高度綁定到縮放值,以使它們的寬度/高度取決於縮放值(So ,例如,他們將Width = Width/ZoomValue
或類似的東西)
我怎樣才能獲得這種行爲使用WPF和綁定?
謝謝!
我有一個Canvas
其上有一些圖像(24x24的大小),我也有一個滾動條放大和縮小畫布。綁定縮放值來控制尺寸
我想在調整畫布大小時使圖像保持相同大小,所以我想將圖像的寬度/高度綁定到縮放值,以使它們的寬度/高度取決於縮放值(So ,例如,他們將Width = Width/ZoomValue
或類似的東西)
我怎樣才能獲得這種行爲使用WPF和綁定?
謝謝!
假設圖像都具有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。
偉大的答案和示例,非常感謝!:)聖誕快樂! – 2011-12-26 12:19:39
祝你聖誕快樂=) – 2011-12-26 12:21:40
出發點是定義你會在綁定使用轉換器,這裏有一些鏈接,可能是有用的:
希望這有助於!
謝謝!將嘗試這些!你有針對我的問題的更具體的代碼示例嗎?這就是我最好的學習方式 – 2011-12-26 12:14:56
我自己並沒有這樣做(意思是我自己沒有創建一個轉換器,我已經使用了內置的一個(boolToVisConverter),所以我沒有任何。請看下面的狒狒回答,他已發佈創建轉換器的代碼! – SpeedBirdNine 2011-12-26 12:19:27
感謝您的協助,thx! – 2011-12-26 12:21:43
不是很確定,如果在這個主題上已經有一些內置的完成,已經在WPF 4.0
,也導致這個功能很久以前被用戶請求。您可以申請的唯一有價值的解決方案是將您的childcontrol.RenderTransform
指定爲的逆,其transformation matrix
爲其父項,因此canvas
。
讓數據綁定分配正確的值
通過這樣做,希望你重新應用到畫布轉型,並得到了「老」矩陣很明顯。考慮到你正在談論一個單一轉型(沒有Translation
,Scale
和Rotation
作出序列),你必須得到數學上可預測(如此正確)的「原始」矩陣(他們稱之爲Identity
)。
看this答案,它又指另一個答案。
希望這會有所幫助。
感謝您的信息! – 2011-12-26 12:19:59
我也想過在我的圖像上應用一個'ScaleTransform',它將綁定到縮放值並且是'1/ZoomValue' – 2011-12-26 16:25:28