WPF覆盖画布上的文本+缩放不工作好
本文关键字:缩放 工作 文本 覆盖 WPF | 更新日期: 2023-09-27 18:14:44
问题1
如何在不删除整个画布内容的情况下重写书面文本?我可以对C#
这样做吗?没有在XAML
代码中添加元素?
问题2
我集成了一个缩放函数,但只有当我指向画布上画的东西时,它才会缩放。当我只指向Canvas
时,我怎么放大呢?
XAML
<Canvas x:Name="coordinateSystemBackground" VerticalAlignment="Top" Cursor="Cross" MouseWheel="coordinateSystemBackground_MouseWheel" RenderTransformOrigin="0.688,0.559" Width="1200" Height="720">
<ScrollViewer Grid.Column="0" Grid.Row="0" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" Width="1200" Height="750">
<Canvas x:Name="coordinateSystem" HorizontalAlignment="Left" VerticalAlignment="Top" Cursor="Cross" UseLayoutRounding="False" Canvas.Left="0" Width="1200" Height="720">
<Canvas.RenderTransform>
<ScaleTransform x:Name="st"/>
</Canvas.RenderTransform>
</Canvas>
</ScrollViewer>
</Canvas>
My Zoom function
private void coordinateSystemBackground_MouseWheel(object sender, MouseWheelEventArgs e)
{
// Skalierungsfaktor
double ScaleRate = 1.1;
//Transformiert gesamte Canvas...
if (e.Delta > 0)
{
st.ScaleX *= ScaleRate;
st.ScaleY *= ScaleRate;
labZoomFaktor.Content = (int)((st.ScaleX * 100) - 100) + " %";
}
else
{
st.ScaleX /= ScaleRate;
st.ScaleY /= ScaleRate;
labZoomFaktor.Content = (int)((st.ScaleX * 100) - 100) + " %";
}
}
为了让命中测试拾取鼠标输入,需要在光标下的目标元素中有一些非空的部分。在这种情况下,画布的子对象正在拾取事件并将它们冒泡到Canvas
,但Canvas
本身只是空白空间,因此不会拾取鼠标输入。通过在Canvas
上设置Background="Transparent"
,您将使整个东西在命中测试中可见。