我正在尝试冻结BitmapCacheBrush,但是当我调用Freeze时会出现错误,说明它无法冻结。
我想要做的是用BitmapCacheBrush填充一个Rectangle,然后在某个时候冻结它,这样我就可以为Rectangle设置动画并重新使用源Grid进行其他操作(同时为Rectangle设置动画)。
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="50*"></RowDefinition>
<RowDefinition Height="50*"></RowDefinition>
</Grid.RowDefinitions>
<Grid x:Name="LISTING">
<Grid.CacheMode>
<BitmapCache RenderAtScale="1" SnapsToDevicePixels="True"/>
</Grid.CacheMode>
<Rectangle x:Name="Rectangle1" Fill="Red" />
<Label Content="Test" FontSize="20" Foreground="Black" />
<Button x:Name="Button1" Click="Button1_Click"/>
</Grid>
<Rectangle Grid.Row="1" x:Name="Rectangle2" >
<Rectangle.Fill>
<BitmapCacheBrush x:Name="BMCB" Target="{Binding ElementName=LISTING}"/>
</Rectangle.Fill>
</Rectangle>
</Grid>
在我的测试中,我试图看看是否可以在单击按钮时冻结BMCB BitmapCacheBrush,然后作为测试我想要隐藏按钮并仍然看到底部矩形完好无损。
我想在性能方面使用BitmapCacheBrush。
这甚至可能吗?
由于 本
答案 0 :(得分:1)
我会说不:但我证明这一点的唯一来源是msdn中的Freezable documentation,其中说:
如果满足以下任何条件,则不能冻结Freezable:
- 它具有动画或数据绑定属性。
- 它具有由动态资源设置的属性。
- 它包含无法冻结的Freezable子对象。
所以我猜你因为Target="{Binding ElementName=LISTING}"
绑定而无法冻结它。