使用+键放大Canvas并使用 - 在Windows应用商店应用中键入?

时间:2015-10-29 11:44:44

标签: c# xaml windows-store-apps windows-8.1 zooming

我正在开发一个Windows应用商店应用程序。我有一个画布,我必须放大每当用户按下“+”键并缩小“ - ”键时。当画布处于原始状态时,缩小应该停止大小

似乎没有默认的方法。

我该怎么做?

我会非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我在尝试这个之前遇到了同样的问题

用于放大或缩小

       delta = 1; // 0 for zoom out
        var transform = canvas.RenderTransform as MatrixTransform;

        var matrix = transform.Matrix;
        var scale = delta >= 0 ? 1.1 : (1.0 / 1.1); // choose appropriate scaling factor

        if (dt == null)
        {
            dt = new System.Data.DataTable();
            dt.Columns.Add("Delta", typeof(double));
            dt.Columns.Add("X", typeof(double));
            dt.Columns.Add("Y", typeof(double));

        }

        dt.Rows.Add(scale, position.X, position.Y);


        matrix.ScaleAtPrepend(scale, scale, position.X, position.Y);
        transform.Matrix = matrix;

重置为原始

    for (int i = dt.Rows.Count - 1; i >= 0; i--)
            {

                var element = MainCanvas;
                var transform = element.RenderTransform as MatrixTransform;
                var matrix = transform.Matrix;

                var Delta = (double)dt.Rows[i]["Delta"] * -1;
                var scale2 = Delta >= 0 ? 1.1 : (1.0 / 1.1); //scale_ * 1;//e.Delta >= 0 ? 1.1 : (1.0 / 1.1); // choose appropriate scaling factor
                var X = (double)dt.Rows[i]["X"];
                var Y = (double)dt.Rows[i]["Y"];
                //matrix = transform_.Matrix;
                matrix.ScaleAtPrepend(scale2, scale2, X, Y);
                transform.Matrix = matrix;
                scale2 = 0;

            }

            dt = null;

in xaml

    <Canvas.RenderTransform>
        <MatrixTransform/>
    </Canvas.RenderTransform>

答案 1 :(得分:0)

ScrollViewer元素具有一组内置函数,可将缩放应用于其子元素。所以你可以将你的画布放在一个:

<ScrollViewer x:Name="scrollViewer" 
  MinZoomFactor="0.5" MaxZoomFactor="5" 
  VerticalScrollMode="Disabled" HorizontalScrollMode="Disabled">
    <Canvas />
</ScrollViewer>

然后在你的cs:

    public MainPage() {
        this.InitializeComponent();
        Window.Current.CoreWindow.KeyDown += Canvas_KeyDown;
    }

    private void Canvas_KeyDown(object sender, KeyEventArgs e) {
        var actual = scrollViewer.ZoomFactor;
        if (e.VirtualKey == Windows.System.VirtualKey.Add)
            scrollViewer.ChangeView(null, null, actual + 0.2f);
        else if (e.VirtualKey == Windows.System.VirtualKey.Subtract)
            scrollViewer.ChangeView(null, null, actual - 0.2f);
    }

您可能需要知道,如果用户使用滚轮滚动,它将自动更改缩放系数,以及移动设备/平板电脑用户“捏”画布。