uwp 中的按钮图标着色
Button Icon tinting in uwp
我有一个按钮,里面有一个白色的图标。如何使用 XAML 更改图标的颜色?
Android 支持像这样给 ImageView 着色:
<ImageView android:layout_width="@dimen/toolbar_icon_size" android:layout_height="@dimen/toolbar_icon_size" android:src="@drawable/btn_home" android:tint="@{@android:color/black}" />
如何在 XAML/UWP 中执行此操作?
我的代码
资源文件:
<Image x:Key="icon_home" Stretch="Fill" Source="ms-appx:///Assets/ToolbarIcons/drawable-xhdpi/btn_home.png"/>
页面文件:
<UserControl.Resources>
<ResourceDictionary Source="ms-appx:///Resources/Images.xaml" />
</UserControl.Resources>
<Button Width="40" Height="40" Content="{StaticResource icon_home}" />
正如@Clemens 所说,您的图标是一个图像文件,可以通过多种方式更改其颜色,但我认为最简单的方法是将此图像源替换为另一个图像源。
我看到你的评论了,也许你想要的是把图片变成白色和黑色,在UWP中没有像在Andriod中那样简单的方法,如果你坚持使用图片并在代码中改变它的颜色,那么这里有一个方法,你可以参考我的.
另一种相当简单的方法是,您可以使用Lumia Imaging SDK 3.0, GrayscaleEffect 可能是您所需要的。
正如 Grace Feng 所提到的,您无法像 Android 允许的那样动态地为按钮(或任何元素)着色(至少不容易)。在 UWP 中,通常最好使用矢量资源而不是位图,因为它们可以缩放到任何分辨率而不会损失清晰度,并且 可以 动态着色。
我有一些替代建议:
使用一个SymbolIcon
<Button Foreground="Red">
<SymbolIcon Symbol="Home"/>
</Button>
您可以从 Symbol 枚举中选择要显示的图像。 UWP 带有许多开箱即用的合适图标供您选择。 SymbolIcon 的前景将从 Button 继承。
关于 SymbolIcon 的一个烦人的事情是,如果你想改变它的大小,你需要将它包裹在一个 Viewbox 中并设置 Viewbox 的大小。
使用一个FontIcon
<Button Foreground="Red" FontSize="30">
<FontIcon FontFamily="Segoe MDL2 Assets" Glyph=""/>
</Button>
FontIcon class 允许您选择合适的字体,其中包含您要显示的图标。 Windows 10内置了Segoe MDL2 Assets字体。您可以找到字形 here。它还尊重 FontSize 属性,这很好。
使用一个PathIcon
如果您想使用完全自定义的图标,此 class 允许您显示来自路径数据的图像。
<Button Foreground="Red">
<PathIcon Data="M0,20 L10,0 L20,20 Z" Width="20" Height="20"/>
</Button>
您需要提供定义图标几何形状的 path markup syntax。这与 SVG 图像中使用的标记基本相同,因此从简单的 SVG 资产中获取此信息应该不难。
您还需要使用 Viewbox(或 RenderTransform)来更改其大小。
您应该使用 BitmapIcon 而不是 od Image。这样你就不必使用矢量,但你可以给它着色。您不必使用完整路径 "ms-appx:///Assets/ToolbarIcons/drawable-xhdpi" 而只需键入 "Assets/..."
<BitmapIcon x:Name="icon_home" UriSource="Assets/ToolbarIcons/drawable-xhdpi/btn_home.png" Foreground="Red"/>
我有一个按钮,里面有一个白色的图标。如何使用 XAML 更改图标的颜色?
Android 支持像这样给 ImageView 着色:
<ImageView android:layout_width="@dimen/toolbar_icon_size" android:layout_height="@dimen/toolbar_icon_size" android:src="@drawable/btn_home" android:tint="@{@android:color/black}" />
如何在 XAML/UWP 中执行此操作?
我的代码
资源文件:
<Image x:Key="icon_home" Stretch="Fill" Source="ms-appx:///Assets/ToolbarIcons/drawable-xhdpi/btn_home.png"/>
页面文件:
<UserControl.Resources>
<ResourceDictionary Source="ms-appx:///Resources/Images.xaml" />
</UserControl.Resources>
<Button Width="40" Height="40" Content="{StaticResource icon_home}" />
正如@Clemens 所说,您的图标是一个图像文件,可以通过多种方式更改其颜色,但我认为最简单的方法是将此图像源替换为另一个图像源。
我看到你的评论了,也许你想要的是把图片变成白色和黑色,在UWP中没有像在Andriod中那样简单的方法,如果你坚持使用图片并在代码中改变它的颜色,那么这里有一个方法,你可以参考我的
另一种相当简单的方法是,您可以使用Lumia Imaging SDK 3.0, GrayscaleEffect 可能是您所需要的。
正如 Grace Feng 所提到的,您无法像 Android 允许的那样动态地为按钮(或任何元素)着色(至少不容易)。在 UWP 中,通常最好使用矢量资源而不是位图,因为它们可以缩放到任何分辨率而不会损失清晰度,并且 可以 动态着色。
我有一些替代建议:
使用一个SymbolIcon
<Button Foreground="Red">
<SymbolIcon Symbol="Home"/>
</Button>
您可以从 Symbol 枚举中选择要显示的图像。 UWP 带有许多开箱即用的合适图标供您选择。 SymbolIcon 的前景将从 Button 继承。
关于 SymbolIcon 的一个烦人的事情是,如果你想改变它的大小,你需要将它包裹在一个 Viewbox 中并设置 Viewbox 的大小。
使用一个FontIcon
<Button Foreground="Red" FontSize="30">
<FontIcon FontFamily="Segoe MDL2 Assets" Glyph=""/>
</Button>
FontIcon class 允许您选择合适的字体,其中包含您要显示的图标。 Windows 10内置了Segoe MDL2 Assets字体。您可以找到字形 here。它还尊重 FontSize 属性,这很好。
使用一个PathIcon
如果您想使用完全自定义的图标,此 class 允许您显示来自路径数据的图像。
<Button Foreground="Red">
<PathIcon Data="M0,20 L10,0 L20,20 Z" Width="20" Height="20"/>
</Button>
您需要提供定义图标几何形状的 path markup syntax。这与 SVG 图像中使用的标记基本相同,因此从简单的 SVG 资产中获取此信息应该不难。
您还需要使用 Viewbox(或 RenderTransform)来更改其大小。
您应该使用 BitmapIcon 而不是 od Image。这样你就不必使用矢量,但你可以给它着色。您不必使用完整路径 "ms-appx:///Assets/ToolbarIcons/drawable-xhdpi" 而只需键入 "Assets/..."
<BitmapIcon x:Name="icon_home" UriSource="Assets/ToolbarIcons/drawable-xhdpi/btn_home.png" Foreground="Red"/>