WPF findancestor не работает на втором табите
Довольно простая проблема (я думаю!), Но я не могу найти простой ответ на нее.
Я создал тестовое приложение WPF, которое содержит tabcontrol и два элемента tab. На каждой вкладке есть кнопка, и ее содержимое связано с путем, который хранится в словаре локальных ресурсов. Свойство "Заливка пути" связывается со свойством "Передний план" кнопки с помощью FindAncestor.
Проблема: на вкладке 1 контент отображается правильно, но на вкладке 2 он не отображается вообще. Если я удаляю привязку FindAncestor и заменяю ее кистью (скажем, белой), обе кнопки отображаются правильно.
Я надеюсь, что упускаю что-то простое, потому что это кажется возможным.
Код:
<Window.Resources>
<ResourceDictionary>
<Path x:Key="TickIcon2" Fill="{Binding Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" Stretch="Uniform" x:Shared="False" Data="F1 M 23.7501,33.25L 34.8334,44.3333L 52.2499,22.1668L 56.9999,26.9168L 34.8334,53.8333L 19.0001,38L 23.7501,33.25 Z"/>
</ResourceDictionary>
</Window.Resources>
<Grid>
<TabControl>
<TabItem Header="1">
<Button Content="{DynamicResource TickIcon2}" Width="50" Height="50" />
</TabItem>
<TabItem Header="2">
<Button Content="{DynamicResource TickIcon2}" Width="50" Height="50" />
</TabItem>
</TabControl>
</Grid>
2 ответа
Я нашел решение на случай, если кто-то столкнется с этой проблемой. Если бы я использовал "Binding" вместо "DynamicResourse", путь отображается правильно на обеих вкладках:
<Grid>
<TabControl>
<TabItem Header="1">
<Button Content="{Binding Mode=OneWay, Source={StaticResource TickIcon2}}" Width="50" Height="50" />
</TabItem>
<TabItem Header="2">
<Button Content="{Binding Mode=OneWay, Source={StaticResource TickIcon2}}" Width="50" Height="50" />
</TabItem>
</TabControl>
</Grid>
Скорее всего, это связано с общим (по умолчанию) характером ресурсов в словаре ресурсов.
читать: MSDN.
Вы можете попытаться сделать ресурс недоступным (x:Shared=False)
<Path x:Key="TickIcon2" x:Shared="False" Fill="{Binding Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" Stretch="Uniform" x:Shared="False" Data="F1 M 23.7501,33.25L 34.8334,44.3333L 52.2499,22.1668L 56.9999,26.9168L 34.8334,53.8333L 19.0001,38L 23.7501,33.25 Z"/>