Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将缩放值绑定到控件';s码_C#_.net_Wpf_Binding_Datatemplate - Fatal编程技术网

C# 将缩放值绑定到控件';s码

C# 将缩放值绑定到控件';s码,c#,.net,wpf,binding,datatemplate,C#,.net,Wpf,Binding,Datatemplate,我有一个画布,上面有一些图像(24x24大小),还有一个滚动条,可以放大和缩小画布 我想在调整画布大小时使图像保持相同大小,因此我考虑将图像的宽度/高度绑定到缩放值,以便它们的宽度/高度取决于缩放值(例如,它们将是width=width/ZoomValue或类似的值) 如何使用WPF和绑定获得此行为 谢谢 起点是定义一个将在绑定中使用的转换器,以下是一些有用的链接: 希望这有帮助 不太确定在WPF 4.0中是否已经有关于此主题的内置功能,这也是因为用户多年前就要求使用此功能。imo,您可以应

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

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

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


谢谢

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


  • 希望这有帮助

    不太确定在
    WPF 4.0
    中是否已经有关于此主题的内置功能,这也是因为用户多年前就要求使用此功能。imo,您可以应用的唯一有价值的解决方案是将您的
    childcontrol.RenderTransform
    指定给其父级的
    变换矩阵的逆矩阵,因此
    画布

    让数据绑定指定正确的值

    通过这样做,希望很清楚,您可以重置应用于画布的转换,并获得“旧”矩阵。考虑到你所说的是一个单一的变换(没有
    平移
    缩放
    旋转
    顺序),你必须得到数学上可预测的(如此正确的)“原始”矩阵(他们称之为
    身份

    请看答案,它再次指向另一个答案


    希望这有帮助。

    假设所有图像的宽度都为24,请绑定到ZoomValue并使用IValueConverter:
    (ZoomValue必须位于ViewModel上)

    画布的资源必须包含ZoomToWidthConverter的键:

    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>
    <Canvas.Resources>
    <local:ZoomToWidthConverter x:Key="ZoomToWidthConverter " />
    </Canvas.Resources>
    </Canvas>
    
    
    

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

    谢谢!我要试试这些!对于我的问题,您有更具体的代码示例吗?这是我学到的最好的方法。我自己没有做过(意思是我自己没有创建转换器,我使用了内置的(boolToVisConverter),所以我没有。看下面狒狒的回答,他已经发布了创建转换器的代码!祝你圣诞快乐,先生=)我还考虑在我的图像上应用一个
    ScaleTransform
    ,它将绑定到缩放值并成为
    1/ZoomValue
    <Canvas>
    <Canvas.Resources>
    <local:ZoomToWidthConverter x:Key="ZoomToWidthConverter " />
    </Canvas.Resources>
    </Canvas>