2

我有一个 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 后,图标将停止绘制。

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

4

2 回答 2

0

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

希望能帮助到你。

于 2012-11-22T02:12:21.650 回答
0

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

于 2012-11-20T02:22:30.337 回答