DataTemplate中的VisualBrush不会重绘

时间:2012-11-19 23:43:23

标签: c# wpf xaml datatemplate visualbrush

我有一个ListView来显示附件,每个附件都有一个删除按钮。当我更改列表的ItemSource时(即,当查看具有不同附件的另一个项目时),删除按钮的图标不再绘制。

这是模板

   <DataTemplate x:Key="attachmentListData">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="Auto"/>

                </Grid.ColumnDefinitions>
                <Label Grid.Column="0">
                    <TextBlock TextTrimming="CharacterEllipsis" Text="{Binding Path=filename}" TextDecorations="{Binding Path=deleted, Converter={StaticResource deletedStrikethroughConverter}}"  />
                </Label>
                <Button Grid.Column="1" Visibility="{Binding Path=deleted, Converter={StaticResource attachmentDeleteButtonVisibilityConverter}}" Style="{DynamicResource MetroCircleButtonStyle}" Width="40" Height="40" Click="onDeleteAttachmentClicked">
                    <Rectangle Fill="Black" Width="15" Height="15">
                        <Rectangle.OpacityMask>
                            <VisualBrush Visual="{StaticResource appbar_close}" Stretch="Fill" />
                        </Rectangle.OpacityMask>
                    </Rectangle>
                </Button>
            </Grid>
        </DataTemplate>

我已经能够通过在屏幕中的其他位置绘制appbar_close图标来解决此问题,但将可见性设置为隐藏。如果图标不在屏幕中的其他位置,则在更改ItemSource后,图标将停止绘制。

显然,这种解决方法很麻烦,但确保图标仍然显示的更好方法是什么?

2 个答案:

答案 0 :(得分:0)

我认为你缺少DataTemplate上的DataType属性。 http://msdn.microsoft.com/en-us/library/system.windows.datatemplate.datatype.aspx。如果您没有在绑定按钮可见性的行上给出绑定错误,我会感到惊讶。

答案 1 :(得分:0)

您可以在appbar_close中设置x:Shared = False,并且还应使用PresentationOptions:FreezeRenderOptions来提高效果。

希望它有所帮助。