将缩放值绑定到控件的大小

本文关键字:控件 缩放 绑定 | 更新日期: 2023-09-27 18:18:59

我有一个Canvas,上面有一些图像(24x24大小),我也有一个滚动条,可以放大和缩小画布。

我想使图像在调整画布大小时保持相同的大小,所以我想到将图像的宽度/高度绑定到缩放值,以便它们的宽度/高度将取决于缩放值(因此,例如,它们将是Width = Width / ZoomValue或类似的东西)

如何使用WPF和绑定获得此行为?

谢谢!

将缩放值绑定到控件的大小

假设所有图像的宽度都为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;
        }
}

画布的资源必须为ZoomToWidthConverter保存一个键:

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

如果图像可以具有不同的原始宽度,则使用MultiBinding和multivalueconverter。

首先定义一个将在绑定中使用的转换器,这里有一些有用的链接:

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

希望这对你有帮助!

不太确定是否已经在WPF 4.0中内置了这个主题,也因为这个功能是多年前由用户要求的。在我看来,您可以应用的唯一有价值的解决方案是将childcontrol.RenderTransform分配给其父transformation matrix,即canvas

让数据绑定赋正确的值

通过这样做,希望很清楚,您重置了应用于画布的转换并获得"旧"矩阵。考虑到您正在谈论的是单个转换(没有Translation, ScaleRotation无序),您必须在数学上可预测(如此正确)"原始"矩阵(他们称之为Identity)。

看这个答案,它又提到了另一个问题。