在Xamarin.Forms中组合 TabbedPage 时,如何让UWP使用该网页的图标属性?
如果我正确配置表单属性/文件,那么looks like UWP could support this就好了。
这是我的TabbedPage XAML。这些图标都已设置好并适用于iOS和Android,甚至UWP中的页面上的图像渲染也很好(这意味着文件可能在项目中正确)。
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:tabbed"
x:Class="tabbed.MainPage">
<TabbedPage.Children>
<local:InitialPage Title="Tab1" Icon="star.png" />
<ContentPage Title="Tab2" Icon="gear.png">
<ContentPage.Content>
<StackLayout>
<Label Text="A nice label." />
<Image Source="star.png" /><!-- works here -->
</StackLayout>
</ContentPage.Content>
</ContentPage>
</TabbedPage.Children>
</TabbedPage>
答案 0 :(得分:3)
我在此http://depblog.weblogs.us/2017/07/12/xamarin-forms-tabbed-page-uwp-with-images/
概述了这是如何实现的简而言之,您需要更改UWP正在使用的默认HeaderTemplate
。但由于Xamarin形式的启动方式,这并不简单。
因此,您需要将自定义模板注入资源字典中。
示例项目在Github上进行https://github.com/Depechie/XamarinFormsTabbedPageUWPWithIcons
更长的细节:
您需要提供自己的TabbedPageStyle
并切换Xamarin用于其UWP渲染的那个。
所以新样式包含一个Image,我们将数据绑定到Xamarin Icon属性。
<Style x:Key="TabbedPageStyle2" TargetType="uwp:FormsPivot">
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel Orientation="Vertical">
<Image Source="{Binding Icon, Converter={StaticResource IconConverter}}" Width="15" Height="15" />
<TextBlock Name="TabbedPageHeaderTextBlock" Text="{Binding Title}"
Style="{ThemeResource BodyTextBlockStyle}" />
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
实际的样式切换是在App.Xaml.cs
这样的
((Style)this.Resources["TabbedPageStyle"]).Setters[0] = ((Style)this.Resources["TabbedPageStyle2"]).Setters[0];
你还需要一个转换器来确保Image控件理解Xamarin提供的Icon源
public class IconConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
if (value != null && value is Xamarin.Forms.FileImageSource)
return ((Xamarin.Forms.FileImageSource)value).File;
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
答案 1 :(得分:2)
目前,UWP TabbedPage renderer根本不使用Icon属性,因此获取标签图标将需要自定义渲染器。甚至官方的UWP样本实际上似乎也没有这个烘焙,requiring a custom UserControl。
Android TabbedPageRenderer和iOS TabbedRenderer,甚至是macOS TabbedPageRenderer,都使用Icon属性来调整标签页UI,但是UWP渲染器需要更新才能使其正常工作。