0

一个相当简单的问题(我认为!),但我似乎无法找到一个简单的答案。

我已经构建了一个测试 WPF 应用程序,其中包含一个选项卡控件和两个选项卡项。每个 tabitem 上都有一个按钮,它的内容绑定到存储在本地资源字典中的路径。Path 的 Fill 属性使用 FindAncestor 绑定按钮的 Foreground 属性。

问题:在 tab1 上内容正确显示,但在 tab2 上根本不显示。如果我删除 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>
4

2 回答 2

0

它很可能与资源字典中资源的共享(默认)性质有关。

阅读: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"/>
于 2015-04-29T11:39:06.540 回答
0

我找到了一个解决方案,以防有人遇到这个问题。如果我使用“绑定”而不是“动态资源”,则路径在两个选项卡上都正确显示:

<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>
于 2015-06-05T10:26:58.830 回答