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

3
我有一个带有一些图片(24x24大小)的Canvas,还有一个滚动条可以缩放画布。

我想让这些图片在调整画布大小时保持相同的大小,所以我考虑将图片的宽度/高度与缩放值绑定,使它们的宽度/高度取决于缩放值(例如,它们将是Width = Width / ZoomValue或类似的内容)。

如何使用WPF和绑定来实现这种行为呢?

谢谢!


我也在考虑对我的图像应用ScaleTransform,它将绑定到缩放值并为1 / ZoomValue - Jonathan Perry
3个回答

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;
        }
}
< p > Canvas的资源必须包含ZoomToWidthConverter的密钥:

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

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

先生,祝您圣诞快乐 =) - Louis Kottmann

1

谢谢!我会尝试这些的!你有我的问题更具体的代码示例吗?那是我最好的学习方式。 - Jonathan Perry
我自己没有做过(意思是我没有创建一个转换器,我使用了内置的一个(boolToVisConverter),所以我没有任何东西。请看下面Baboon的答案,他已经发布了创建转换器的代码! - SpeedBirdNine

1

不太确定在 WPF 4.0 中是否已经有关于这个主题的内置功能,而且因为这个功能是多年前由用户提出的。在我看来,你可以应用的唯一有价值的解决方案就是将你的childcontrol.RenderTransform指定为其父级 canvas逆转换矩阵

使用数据绑定来分配正确的值

这样做,希望很清楚,你重置了应用于画布的变换,并获得了“旧”的矩阵。考虑到你所谈论的是单一变换(没有依次进行的TranslationScaleRotation),你必须获得数学上可预测(因此是正确的)的“原始”矩阵(称之为Identity)。

请查看this答案,该答案又引用了另一个答案。

希望这可以帮助到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接