【问题标题】:What construct to use for a reusable, recolorable icon in XAML?XAML 中可重用、可重新着色的图标使用什么构造?
【发布时间】:2010-10-15 12:27:24
【问题描述】:

我正在设计一个基于 WPF 的小型应用程序,我想在一个表单中定义一些 XAML 中常用的矢量图标,可以在一个视图上的多个控件中使用,并且可以通过绑定重新着色。

例如,我想将一个小十字图标从黑色变为灰色以及禁用按钮中的文本(即用前景画笔着色)。通过 (ab) 使用 Tag 属性在按钮上设置图标。

目前,我正在使用基于 GeometryBrush 的 DrawingBrushes,然后将其用于填充矩形,但在这里我看不到共享颜色的方法。

有什么方法可以达到这个效果(最好是优雅和简单)? =)

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

    您可以在样式中定义路径的几何图形(或根据需要单独定义为几何图形)并将其作为静态资源重用

    <Style x:Key="PathStyle" TargetType="{x:Type Path}">
        <Setter Property="Data" Value="M0,0 L100,0 L100,100 L0,100Z" />
    </Style>
    

    然后根据需要更改路径的颜色。

    <Path Style="{StaticResource PathStyle}" Stroke="Green" Fill="Blue" HorizontalAlignment="Left" />
    
    <Path Style="{StaticResource PathStyle}" Stroke="Purple" Fill="Orange" HorizontalAlignment="Right" />
    

    【讨论】:

    • 我认为 OP 希望能够将颜色作为资源共享......不确定这是否能回答他的问题。
    • 谢谢!这应该适用于重用图标。我已经知道如何重复使用颜色了,Dan,但谢谢 =)
    【解决方案2】:

    您可以将 Geometry 定义为 Resource,然后在 Path 中使用它来执行任何您想要设置 Fill 和 Stroke 颜色的操作。

    <Geometry x:Key="MagnifyingGlassGeometry">M 64,9C 81.67,9 96,23.3 96,41C 96,58.67 81.67,73 64,73C 46.3,73 32,58.67 32,41C 32,23.3 46.3,9 64,9 Z M 39,66L 6.5,98.5</Geometry>
    
    <Path Data="{StaticResource MagnifyingGlassGeometry}" Fill="{DynamicResource MyBrush}" Stroke="{Binding DataBrush}"/>
    

    【讨论】:

      【解决方案3】:

      除了其他答案之外,值得注意的是,Fill="Blue" 之类的内容是类似以下内容的简写:

      ...
      <Path.Fill>
         <SolidColorBrush>
             <SolidColorBrush.Color>
                 <Color>Red</Color>
             </SolidColorBrush.Color>
         </SolidColorBrush>
      </Path.Fill>
      

      所以你也可以使用这样的资源:

      <Page.Resources>
         <Color x:Key="FillColor">Red</Color>
         <SolidColorBrush x:Key="FillBrush" Color="{StaticResource FillColor}" />
      </Page.Resources>
      
      <Path Fill="{StaticResource FillBrush}" ..... />
      

      您可以在任意数量的画笔中重复使用颜色资源,然后您的应用程序的所有颜色都集中在一个位置并且可以轻松更改。

      【讨论】:

        猜你喜欢
        • 2012-05-25
        • 2011-04-16
        • 2021-06-21
        • 2013-05-15
        • 2011-12-01
        • 2012-03-19
        • 2015-07-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多