Значки пути статического ресурса TabControl исчезают при переключении вкладки

Кажется, я не нашел ответа, как сделать многоразовые значки путей в wpf. Я подозреваю, что моя проблема такая же, как с использованием визуальных элементов изображения вместо источника, но не могу понять, как это исправить для путей.

У меня есть элемент управления вкладками с отдельными пользовательскими элементами управления на вкладках. У каждого из них есть кнопки с содержимым «пути».

<Button Style="{StaticResource ButtonIconStyle}"
        Content="{StaticResource RefreshIcon}" 
        Command="{Binding RefreshCommand}"/>

Где значок:

<Path x:Key="RefreshIcon" Stretch="Uniform" 
      Fill="{StaticResource ButtonIconColor}" Data="..."/>

Мне нужна эта равномерная растяжка, поэтому я также попробовал ViewBox, но это не помогло.

Первая вкладка с этим значком, которую я открываю, отображается нормально (это может быть любая вкладка, не первая в tabcontrol). Но после переключения на другую вкладку с той же определенной кнопкой и возврата на предыдущую вкладку значок на первой больше не отображается. Это произошло только с одинаковыми значками (если значка нет на второй вкладке, он останется видимым).

поведение управления вкладкой

Что я могу с этим поделать?

Кстати, мои кнопки стилизованы, но то же самое произошло, когда они были просто прямоугольными кнопками с содержимым пути.


person Ritro    schedule 08.01.2016    source источник


Ответы (1)


Проблема в том, что на ваш путь ссылаются с помощью StaticResourceExtension в нескольких местах (разные экземпляры Button). Поскольку Path является FrameworkElement и может встречаться в визуальном дереве только один раз, что произойдет, если вы загрузите вторую вкладку (таким образом, загружая Path на эту вкладку, она выгружается из предыдущей вкладки (для выполнения указанного условия). Наблюдайте что он всегда будет виден на последней выбранной вкладке.

Чтобы решить эту проблему, вам нужно установить x:Shared="False" для вашего Path в словаре ресурсов - таким образом, всякий раз, когда на него ссылаются с помощью StaticResouceExtension, будет возвращена копия, а не фактический экземпляр из словаря ресурсов, каждый из которых будет загружен и останется в визуальном дереве, как и ожидалось.

person Grx70    schedule 08.01.2016