尝试冻结填充了BitmapCacheBrush的Rectangle时出错

时间:2011-10-05 10:30:28

标签: wpf freeze

我正在尝试冻结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。

这甚至可能吗?

由于 本

1 个答案:

答案 0 :(得分:1)

我会说不:但我证明这一点的唯一来源是msdn中的Freezable documentation,其中说:

  

如果满足以下任何条件,则不能冻结Freezable:

     
      
  • 它具有动画或数据绑定属性。
  •   
  • 它具有由动态资源设置的属性。
  •   
  • 它包含无法冻结的Freezable子对象。
  •   

所以我猜你因为Target="{Binding ElementName=LISTING}"绑定而无法冻结它。