我有一个Canvas,我已经添加了几千个多边形。
我希望能够放大(我正在通过ScaleTransform进行放大。
但是我一直在尝试使用Canvas.Clip来绘制Canvas的一部分,但是一旦ScaleTransform值改变,剪辑就会停止工作......
<Canvas Grid.Row="1" Margin="10" x:Name="cnvMain" Background="Transparent" >
<Canvas.Clip>
<RectangleGeometry x:Name="CanvasClip" Rect="0, 0, 300, 300"/>
</Canvas.Clip>
<Canvas.RenderTransform>
<ScaleTransform x:Name="CanvasScaleTransform" ScaleX="1" ScaleY="1"></ScaleTransform>
</Canvas.RenderTransform>
</Canvas>
在我的代码隐藏中,
private void slScale_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
CanvasScaleTransform.ScaleX = slScale.Value;
CanvasScaleTransform.ScaleY = slScale.Value;
}
我做了什么明显的错误吗?
答案 0 :(得分:2)
ScaleTransform(与所有其他变换一样)在每次其他渲染后应用。这意味着,首先应用cliprect,然后进行缩放变换。一个解决方案是通过在这一个周围放置另一个画布来将剪辑提高一级。
答案 1 :(得分:1)
在画布周围放置边框,并将剪辑区域附加到边框而不是画布。