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

时间:2013-05-21 14:14:13

标签: c# wpf xaml text drawing

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

1 个答案:

答案 0 :(得分:0)

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