Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to change icon color in Xamarin.Forms xaml page?

Tags:

Currently, I am developing a Xamarin.Forms PCL application for Android and iOS. In one of my pages I define a ListView. The template for the ListView.ItemTemplate displays an icon using <Image Source="some_Icon.png" />. The icon displays as expected (black) but I have not found a way to set the color.

I would like to colorize this icon based on logic in my ViewModel.

I have searched for answers both through the Documentation and StackOverlflow to no avail.

  1. Is there a better way to display and style icons from a Xamarin.Forms PCL project?

  2. Does Xamarin.Forms require a set of resource/image files for every possible color I might use?

like image 942
Bolezee Avatar asked Jun 24 '16 18:06

Bolezee


People also ask

How do I change icons on Xamarin app?

An easy way to change the icon is to replace the icon. png : design a set of icons in different sizes, and put each icon into the corresponding folder, make sure each icon is named icon. png, then the old icon file will be replaced.

Is XAML the same as Xamarin?

XAML. XAML is used as the declarative markup language for WPF and Xamarin. Forms. For the most part, the syntax is identical - the primary difference is the objects that are defined/created by the XAML graphs.

What is XAML in Xamarin forms?

In a Xamarin. Forms application, XAML is mostly used to define the visual contents of a page and works together with a C# code-behind file. The code-behind file provides code support for the markup. Together, these two files contribute to a new class definition that includes child views and property initialization.

Does Xamarin use XAML?

Only Xamarin Forms support sharing of UI via XAML. UI for iOS has to be made using xib or storyboard. For Android using AXML. Windows Phone, UWP, WinPhone Silverlight, Windows can use XAML for UI.


1 Answers

I solved my problem with Iconize for Xamarin.Forms. I implemented my solution based off the Iconize sample code below.

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:iconize="clr-namespace:FormsPlugin.Iconize;assembly=FormsPlugin.Iconize"
         x:Class="Iconize.FormsSample.Page1"
         Title="{Binding FontFamily}">

  <ContentPage.ToolbarItems>
    <iconize:IconToolbarItem Command="{Binding ModalTestCommand}" Icon="fa-500px" />
    <iconize:IconToolbarItem Command="{Binding VisibleTestCommand}" Icon="fa-500px" IconColor="Red" />
    <iconize:IconToolbarItem Command="{Binding VisibleTestCommand}" Icon="fa-500px" IsVisible="{Binding VisibleTest}" />
  </ContentPage.ToolbarItems>
  <ListView CachingStrategy="RecycleElement" ItemsSource="{Binding Characters}">
    <ListView.ItemTemplate>
      <DataTemplate>
        <ViewCell>
          <StackLayout Orientation="Horizontal">
            <iconize:IconImage HeightRequest="20" Icon="{Binding Key}" IconColor="Blue" WidthRequest="20" />
            <iconize:IconImage HeightRequest="20" Icon="{Binding Key}" BackgroundColor="Blue" IconColor="Yellow" WidthRequest="20" IconSize="10" />
            <iconize:IconButton FontSize="20" Text="{Binding Key}" TextColor="Red" WidthRequest="48" />
            <iconize:IconLabel FontSize="20" Text="{Binding Key}" TextColor="Green" VerticalTextAlignment="Center" />
            <Label Text="{Binding Key}" VerticalTextAlignment="Center" />
          </StackLayout>
        </ViewCell>
      </DataTemplate>
    </ListView.ItemTemplate>
  </ListView>
</ContentPage>

In my case, I simply had to replace my original <Image .../> element and replace it with <iconize:IconImage HeightRequest="20" Icon="fa-circle" IconColor="{Binding CircleColor}" WidthRequest="20" />.

In my ViewModel, I added the CircleColor property to set the icon color as needed based on my logic.

like image 82
Bolezee Avatar answered Sep 28 '22 01:09

Bolezee