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) + " %";
    }            
}

WPF覆盖画布上的文本+缩放不工作好

为了让命中测试拾取鼠标输入,需要在光标下的目标元素中有一些非空的部分。在这种情况下,画布的子对象正在拾取事件并将它们冒泡到Canvas,但Canvas本身只是空白空间,因此不会拾取鼠标输入。通过在Canvas上设置Background="Transparent",您将使整个东西在命中测试中可见。