【问题标题】:Binding zoom value to control's size将缩放值绑定到控件的大小
【发布时间】:2012-01-27 23:03:42
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

  • 我也在考虑可能在我的图像上应用ScaleTransform,这将绑定到缩放值并成为1 / ZoomValue

标签: c# .net wpf binding datatemplate


【解决方案1】:

假设所有图像的宽度均为 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。

【讨论】:

  • 先生圣诞快乐 =)
【解决方案2】:

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

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

希望这会有所帮助!

【讨论】:

  • 谢谢!会试试这些!对于我的问题,您有更具体的代码示例吗?这是我最好的学习方式
  • 我自己没有做过(意味着我自己没有创建转换器,我使用了内置转换器(boolToVisConverter)所以我没有。看看下面狒狒的回答,他发布了创建转换器的代码!
【解决方案3】:

不太确定WPF 4.0 中是否已经对此主题进行了内置操作,这也是因为用户多年前就要求使用此功能。 imo,您可以应用的唯一有价值的解决方案是将您的childcontrol.RenderTransform 分配给其父级的transformation matrixinverse,即canvas

让数据绑定分配正确的值

通过这样做,希望很清楚,您重置了应用于画布的转换并获得“旧”矩阵。考虑到您正在谈论 single 转换(没有 TranslationScaleRotation 不连续),您必须获得数学上可预测(非常正确)的“原始”矩阵(他们称之为Identity)。

查看this 的答案,它又引用了另一个答案。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2020-01-21
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多