我有一个Canvas
,上面有一些图像(尺寸为24x24),我还有一个可以放大和缩小画布的滚动条。
我想在调整画布大小时使图像保持相同的大小,所以我想把图像的宽度/高度绑定到缩放值,这样它们的宽度/高度将取决于缩放值(所以,例如,它们将是Width = Width / ZoomValue
或类似的东西)
如何使用WPF和绑定获取此行为?
谢谢!
答案 0 :(得分:2)
假设图像的宽度均为24,则绑定到ZoomValue并使用IValueConverter:
(ZoomValue必须在您的ViewModel上)
<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;
}
}
Canvas的资源必须包含ZoomToWidthConverter的键:
<Canvas>
<Canvas.Resources>
<local:ZoomToWidthConverter x:Key="ZoomToWidthConverter " />
</Canvas.Resources>
</Canvas>
如果图像可以具有不同的原始宽度,请使用MultiBinding和IMultiValueConverter。
答案 1 :(得分:1)
起点是定义一个你将在绑定中使用的转换器,这里有一些有用的链接:
答案 2 :(得分:1)
不确定WPF 4.0
中是否已对此主题进行了某些内置功能,也导致此功能在很久以前就被用户请求了。您可以应用的唯一有价值的解决方案是将childcontrol.RenderTransform
分配给其父级transformation matrix
的反向,以便canvas
。
让数据绑定分配正确的值
通过这样做,希望它很清楚,你重置应用于画布的转换并获得“旧”矩阵。考虑到您正在谈论单个转换(没有Translation
,Scale
和Rotation
做出的序列),您必须在数学上可预测(所以正确)“原始”矩阵(他们称之为Identity
)。
查看this回答,再次引用另一个回答。
希望这有帮助。