Использование значков в шаблоне заголовка UWP с помощью xamarin.froms

Я пишу приложение с использованием Xamarin.Forms и хочу отображать значки на странице с вкладками для приложения UWP. Для этого я пытаюсь использовать собственный рендерер. Код пользовательских рендереров

class TabbedPageWithIconsRenderer : TabbedPageRenderer
{
    protected override void OnElementChanged(VisualElementChangedEventArgs e)
    {
        base.OnElementChanged(e);

        if (e.NewElement != null && Control != null)
        {
            Control.HeaderTemplate = App.Current.Resources["TabHeaderTemplate"] as DataTemplate;
        }
    }
}

И стиль шаблона данных:

<forms:ImageConverter x:Key="imageConverter" />

    <DataTemplate x:Key="TabHeaderTemplate">
        <StackPanel >
            <Image
                HorizontalAlignment="Center"
                Margin="0,12,0,0"
                Height="24"
                Width="24"
                Source="{Binding Icon, Converter={StaticResource imageConverter}}" />
            <TextBlock
                FontFamily="Segoe UI"
                Text="{Binding Title}"
                Style="{StaticResource CaptionTextBlockStyle}"
                LineStackingStrategy="BlockLineHeight"
                LineHeight="14"
                MaxLines="2"
                IsTextScaleFactorEnabled="False"
                TextAlignment="Center"
                HorizontalAlignment="Center"
                Margin="2,5,2,7" />
        </StackPanel>
    </DataTemplate>

Проблема в том, что заголовок работает нормально, но значки никогда не появляются, однако они правильно назначаются каждой странице в Forms.Xaml.

Что я делаю неправильно?


person Alexey Vukolov    schedule 23.03.2017    source источник


Ответы (1)


Я проверил ваш код и воспроизвел вашу проблему. Я решил проблему с помощью нового конвертера изображений, например следующих кодов.

public class MyImageConverter:Windows.UI.Xaml.Data.IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        var temp = (value as FileImageSource).File;
        Windows.UI.Xaml.Media.ImageSource source = new BitmapImage(new Uri(temp));
        return source;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}

Тип возврата IconXamarin.Forms.FileImageSource, когда вы устанавливаете привязку для Source="{Binding Icon,Converter={StaticResource imageConverter}}" (хотя вы использовали imageConverter, ожидаемый эффект не был достигнут). И вы использовали Windows.UI.Xaml.Controls.Image для своего TabHeaderTemplate. Image.Source принимает только значение типа Windows.UI.Xaml.Media.ImageSource. Таким образом, вы можете настроить конвертер так же, как код выше.

person Nico Zhu - MSFT    schedule 24.03.2017
comment
Ваш образец конвертера работал. Кажется, невозможно использовать стандартный конвертер изображений Xamarin.Forms для HeaderTemplate. - person Alexey Vukolov; 24.03.2017