除了Button之外,哪些控件可以显示WPF Geometry图标而不定义Stroke或Fill?

时间:2016-08-18 12:41:12

标签: wpf xaml pathgeometry

我需要显示这样的图标:

<Geometry x:Key="Geometry.LeftArrow">M 6.5 0.5 L 7.5 1 L 7.5 0 L 6.5 0.5 z</Geometry>

如果我把它们放在按钮上就可以了。但是我需要在许多其他地方展示它们,但它们没有显示出来。有时它有助于定义Stroke / Fill,但这是错误的。我不想弥补一些硬编码的颜色,当主题/风格改变时看起来很愚蠢。

这有效:

<Button>
    <Path Data="{StaticResource Geometry.LeftArrow}" Stretch="Uniform" MaxHeight="12"/>
</Button>

这不是:

<Label>
    <Path Data="{StaticResource Geometry.LeftArrow}" Stretch="Uniform" MaxHeight="12"/>
</Label>

那么这里的逻辑是什么?我怎么能只显示它们让我们说一些TextBox旁边?

1 个答案:

答案 0 :(得分:1)

我试过这个并且Path没有在Button中获得默认填充或描边。

我的解决方案是定义一个默认的Path样式,它将Fill(或Stroke,无论哪个)设置为{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}

<Style TargetType="Path">
    <Setter 
        Property="Fill" 
        Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" 
        />
</Style>

精心设计的主题应该使用那些SystemColors刷子键。如果主题设计不合理,您可以添加一些“垫片”资源定义,将定义SystemColors刷子键定义到适当的主题资源。

如果我想在Path中为Button提供默认填充但不在其他位置,我可以通过在Path的资源中定义默认Button样式来实现式:

<Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
    <Style.Resources>
        <Style TargetType="Path">
            <Setter 
                Property="Fill" 
                Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" 
                />
        </Style>
    </Style.Resources>

    <!-- other stuff -->
</Style>

现在你已经和你的风格和偶像人谈过了(所以果冻;我们必须为自己做这些事情),看起来这就是这里发生的事情的本质。