在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>
这是因为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。
此外,您需要设置"边界"的"背景",使其在测试中可见。