在WPF中捏一个文本框

本文关键字:一个 文本 WPF | 更新日期: 2023-09-27 17:58:19

我通过ManipulationDelta方法获得了一个用于在WPF中缩放frameworkelements的工作代码。它适用于所有类型的元素,如按钮、形状或文本块,但不适用于文本框。

有人知道我该怎么修吗?

编辑:这是我的代码的简化版本:

 private void canvas_ManipulationDelta(object sender, ManipulationDeltaEventArgs  e)
    {
        var element = e.Source as FrameworkElement;
        var transformation = element.RenderTransform as MatrixTransform;
        var matrix = transformation == null ? Matrix.Identity : transformation.Matrix;
            matrix.ScaleAt(e.DeltaManipulation.Scale.X,
           e.DeltaManipulation.Scale.Y,
            1, 
           1);
        }
        matrix.RotateAt(e.DeltaManipulation.Rotation,
                        e.ManipulationOrigin.X,
                        e.ManipulationOrigin.Y);
        matrix.Translate(e.DeltaManipulation.Translation.X,
                         e.DeltaManipulation.Translation.Y);
        element.RenderTransform = new MatrixTransform(matrix);
        e.Handled = true;
       }

元素是一般创建的,但它与xaml:相同

        <Canvas Name="SomeCanvas" ManipulationDelta="canvas_ManipulationDelta">
            <TextBox   Canvas.Left="400" Canvas.Top="200" Height="50" Name="s3" IsManipulationEnabled = "true" Background="#57FF3ACB"  />
        </Canvas>

在WPF中捏一个文本框

这是因为TextBox在内部处理MouseDown事件。他们从来没有接到电话,所以操纵不起作用。以下是解释:

http://msdn.microsoft.com/es-es/library/ms750580(v=vs.85).aspx

或者,您可以将文本框包装在边框中:

<Canvas Name="SomeCanvas" ManipulationDelta="canvas_ManipulationDelta">
    <Border Canvas.Left="400" Canvas.Top="200" Background="Transparent" IsManipulationEnabled="True">
        <TextBox Height="50" Name="s3" Background="#57FF3ACB" IsHitTestVisible="False" />
    </Border>
</Canvas>

将IsHitTestVisible属性设置为False,以便让鼠标事件从TextBox传递到Border。

此外,您需要设置"边界"的"背景",使其在测试中可见。