C# 数据模板中的VisualBrush不';重画

C# 数据模板中的VisualBrush不';重画,c#,wpf,xaml,datatemplate,visualbrush,C#,Wpf,Xaml,Datatemplate,Visualbrush,我有一个列表视图来显示附件,每个附件都有一个删除按钮。当我更改列表的ItemSource时(即查看具有不同附件的其他项目时),删除按钮的图标不再绘制 这是模板 <DataTemplate x:Key="attachmentListData"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width=

我有一个列表视图来显示附件,每个附件都有一个删除按钮。当我更改列表的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图标来解决这个问题,但是将可见性设置为hidden。如果图标不在屏幕的其他地方,在我更改ItemSource后,图标将停止绘制


很明显,这个解决方法很粗糙,但是有什么更好的方法来确保图标仍然显示出来呢

我认为您缺少DataTemplate上的DataType属性。如果在绑定按钮可见性的线路上没有出现绑定错误,我会感到惊讶

您可以在appbar\u close中设置x:Shared=False,也可以使用,以提高性能


希望有帮助。

您是否尝试过在appbar\u close上使用x:Shared=False?我刚刚尝试过在appbar\u close上将x:Shared设置为False,这是可行的,但这似乎为以后的一些性能问题打开了大门,因为图标没有被重用,对吗?