我正在尝试向使用ApplicationResources
Xamarin
应用添加一些MvvmCross
我目前有一个App.cs
文件,如下所示:
public class App : MvxApplication
{
/// <summary>
/// Initializes this instance.
/// </summary>
public override void Initialize()
{
this.CreatableTypes()
.EndingWith("Service")
.AsInterfaces()
.RegisterAsLazySingleton();
.....etc etc..
}
}
我现在关注Working with Styles using Xaml for your application并且已经:
<?xml version="1.0" encoding="utf-8" ?>
<Application xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:mvvmcross="clr-namespace:Cirrious.MvvmCross.ViewModels;assembly=Cirrious.MvvmCross"
x:Class="FieldStrikeMove.Core.App">
<Application.Resources>
<ResourceDictionary>
<Style x:Key="TestStyle" TargetType="Label">
<Setter Property="TextColor" Value="Green" />
</Style>
</ResourceDictionary>
</Application.Resources>
</Application >
我还在partial
课程中添加了App.cs
关键字,但这说明了:
部分声明不得指定不同的基类
所以我试过
<?xml version="1.0" encoding="utf-8" ?>
<mvvmcross:MvxApplication xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:mvvmcross="clr-namespace:Cirrious.MvvmCross.ViewModels;assembly=Cirrious.MvvmCross"
x:Class="FieldStrikeMove.Core.App">
<Application.Resources>
<ResourceDictionary>
<Style x:Key="TestStyle" TargetType="Label">
<Setter Property="TextColor" Value="Green" />
</Style>
</ResourceDictionary>
</Application.Resources>
</mvvmcross:MvxApplication>
但我明白了:
错误35类型&#39; FieldStrikeMove.Core.App&#39;不能用作类型参数&#39; TView&#39;在泛型类型或方法&#39; Xamarin.Forms.Xaml.Extensions.LoadFromXaml(TView,System.Type)&#39;。来自&#39; FieldStrikeMove.Core.App&#39;没有隐式参考转换。到&#39; Xamarin.Forms.BindableObject&#39;。
是否可以通过Xaml
MvvmCross
应用程序获得Xamarin
个应用资源
答案 0 :(得分:6)
所以在@Davids回答之后,我意识到提供一个新的App
课程并不会随处可见。
我发现我可以使用
在代码中设置ResourceDictionary
Application.Current.ResourceDictionary = new ResourceDictionary();
//add styles here
我尝试在Xaml中将其设置为Xaml ResourceDictionary
,如下所示:
<ResourceDictionary xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MyApp.Styles">
<Style x:Key="labelStyle" TargetType="Label">
<Setter Property="TextColor" Value="Green" />
</Style>
</ResourceDictionary>
但我得到
MyApp.Styles无法从密封类型派生 Xamarin.Forms.ResourceDictionary
(谢谢Xamarin)
因此,我的最终解决方案是:
向我的PCL项目添加ContentPage
:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MyApp.Styles">
<ContentPage.Resources>
<ResourceDictionary>
<Style x:Key="labelStyle" TargetType="Label">
<Setter Property="TextColor" Value="Green" />
</Style>
</ResourceDictionary>
</ContentPage.Resources>
</ContentPage>
然后在MainActivity
来电后LoadApplication
执行:
var styles = new Styles();
Xamarin.Forms.Application.Current.Resources = styles.Resources;
答案 1 :(得分:2)
可能不是你想要的答案,但我认为你不能。事实上,我不认为你可以使用MVVMCross Xaml或其他方式使用Xamarin.Forms应用程序级别样式。样式似乎是从Application Class中实现的。应用程序包含一个ResourceDictionary,因此Application应该负责应用Dictionary中定义的样式。
MvxApplication没有这样的属性,因此即使你把它们定义为XAML将它们加载到ResourceDictionary中,我也找不到你应用它们的地方。