我有一个包含以下元素的用户控件:
<UserControl
...>
<ScrollViewer Name="LayoutScroll" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
<Grid Name="MainGrid">
<Canvas x:Name="LayerObjects" Panel.ZIndex="2"
Width="{Binding ActualWidth,ElementName=MainGrid}" Height="{Binding ActualHeight, ElementName=MainGrid}">
<Canvas.CacheMode>
<BitmapCache
EnableClearType="False"
SnapsToDevicePixels="False"
RenderAtScale="2"/>
</Canvas.CacheMode>
</Canvas>
</Grid>
</ScrollViewer>
</UserControl>
我使用此用户控件将多个形状绘制到其中。绘图工作得很好,删除工作也很好(我不知道我改变了什么,只是无法弄清楚)。 每次我想从这个画布中删除一个元素时,我只会这样做:
LayerObject.Children.Remove(shape);
现在,当我这样做时,从画布上看不到形状。它就在那里。当我移动窗口或放大到画布时,形状消失了。 所以,我的问题是,有没有什么方法可以'#34;渲染&#34;删除元素后的画布?
到目前为止我尝试了什么(没有成功):
答案 0 :(得分:1)
我已经通过在更改Canvas子项之前删除CacheMode然后重新启用它来解决这个问题。
CacheMode oTempCM = oCanvas.CacheMode;
oCanvas.CacheMode = null;
//do canvas operations ...
oCanvas.CacheMode = oTempCM;
谢谢@Clemens。