2017-03-23 2 views
1

J'écris une application en utilisant Xamarin.Forms, et je veux montrer des icônes dans une page à onglets pour l'application UWP. Pour ce faire, j'essaie d'utiliser un moteur de rendu personnalisé. code équarrisseurs personnalisés estEn utilisant des icônes dans le modèle d'en-tête UWP avec xamarin.froms

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; 
     } 
    } 
} 

et le style de modèle de données est:

<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> 

Le problème est que le titre fonctionne très bien, mais les icônes apparaissent jamais, mais ils sont correctement assignés à chaque page Forms.Xaml.

Qu'est-ce que je fais mal?

Répondre

0

J'ai testé votre code et reproduit votre problème. J'ai résolu le problème par un nouveau convertisseur d'image personnalisé comme les codes suivants.

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(); 
    } 
} 

Le type de retour de Icon est Xamarin.Forms.FileImageSource lorsque vous définissez la liaison pour Source="{Binding Icon,Converter={StaticResource imageConverter}}" (bien que vous avez utilisé le ImageConverter, l'effet escompté n'a pas été atteint). Et vous avez utilisé le Windows.UI.Xaml.Controls.Image pour votre TabHeaderTemplate. Le Image.Source accepte uniquement la valeur de type Windows.UI.Xaml.Media.ImageSource. Donc, vous pouvez personnaliser un convertisseur comme le code ci-dessus.

+0

Votre exemple de convertisseur a fonctionné. Il semble qu'il est impossible d'utiliser le convertisseur d'image Xamarin.Forms standard pour HeaderTemplate. –