VisualBrush в DataTemplate не перерисовывается
У меня есть 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 ответа
Я думаю, что вы отсутствует свойство DataType на DataTemplate. http://msdn.microsoft.com/en-us/library/system.windows.datatemplate.datatype.aspx. Я был бы удивлен, если бы это не давало вам ошибку привязки в строке, где вы привязываете кнопку Видимость.
Вы можете установить x:Shared=False в appbar_close, а также вы должны использовать PresentationOptions: Freeze, RenderOptions для производительности.
Надеюсь, поможет.