繁体   English   中英

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

[英]Binding zoom value to control's size

我有一个带有一些图像(尺寸为24x24)的Canvas ,我还有一个可以放大和缩小画布的滚动条。

我想在调整画布大小时使图像保持相同的大小,所以我想将图像的宽度/高度绑定到缩放值,以便它们的宽度/高度将取决于缩放值(例如,它们将是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;
        }
}

Canvas的资源必须包含ZoomToWidthConverter的键:

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

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

起点是定义一个你将在绑定中使用的转换器,这里有一些有用的链接:

  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

让数据绑定分配正确的值

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

看看这个答案,再次引用另一个答案。

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM