我使用UWP
进行Xamarin.Forms
应用构建我在DataTrigger
上有一个简单的Grid
,如下所示:
<Grid.Triggers>
<DataTrigger TargetType="Grid" Binding="{Binding Selected}" Value="True">
<Setter Property="BackgroundColor" Value="{StaticResource SelectedListItemColour}"/>
</DataTrigger>
<DataTrigger TargetType="Grid" Binding="{Binding Selected}" Value="False">
<Setter Property="BackgroundColor" Value="{StaticResource ContentGridColour}"/>
</DataTrigger>
</Grid.Triggers>
构建为 DEBUG 时,此功能完全正常。
但是,当我使用 .Net Native Toolchain (Windows应用商店应用程序所需)构建 RELEASE 时,数据触发器停止工作,几乎就像它不存在一样所有,没有错误,只是一无所获。
有没有人见过这个或设法解决它?
修改
我添加了一个示例应用here。 复制的步骤:
答案 0 :(得分:2)
所以这是一个Xamarin.Forms
问题概述here:
&#34;目标调用异常&#34;使用&#34;使用.NET Native编译时 工具链&#34;如果您的UWP应用程序正在引用多个程序集(for 示例第三方控件库,或您的应用程序本身 分成多个PCL),Xamarin.Forms可能无法加载对象 来自这些程序集(例如自定义渲染器)。
使用Compile with .NET Native工具链时可能会发生这种情况 这是属性&gt;中UWP应用的一个选项。构建&gt;一般 该项目的窗口。
您可以通过使用Forms.Init的特定于UWP的重载来解决此问题 调用App.xaml.cs,如下面的代码所示(你应该替换 ClassInOtherAssembly与您的代码引用的实际类):
这意味着我必须这样做:
Xamarin.Forms.Forms.Init(e, new[] { typeof(Xamarin.Forms.Xaml.Extensions).GetTypeInfo().Assembly });
让DataTriggers
工作
注意Xamarin没有记录这一点。对于他们自己的图书馆!!!!
答案 1 :(得分:0)
也许你的代码项目中有一些奇怪的东西。我只能根据您提供的项目重现您的问题。我创建了一个新项目但未能重现它。您可以参考以下代码。
<强> HomePage.xaml 强>
<ContentPage.BindingContext>
<local:HomePageViewModel />
</ContentPage.BindingContext>
<StackLayout>
<StackLayout.Triggers>
<DataTrigger TargetType="StackLayout" Binding="{Binding IsSelected }" Value="False">
<Setter Property="BackgroundColor" Value="Green"/>
</DataTrigger>
<DataTrigger TargetType="StackLayout" Binding="{Binding IsSelected}" Value="True">
<Setter Property="BackgroundColor" Value="Red"/>
</DataTrigger>
</StackLayout.Triggers>
<Button x:Name="MyBtn" Command="{Binding Trigger}" Text="ClickMe" />
</StackLayout>
<强> HomePageViewModel.cs 强>
public class HomePageViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string PropertyName = null)
{
this.PropertyChanged(this,new PropertyChangedEventArgs(PropertyName));
}
private bool _isSelected;
public bool IsSelected
{
get { return _isSelected; }
set
{
_isSelected = value;
OnPropertyChanged();
}
}
private Command _trigger;
public Command Trigger
{
get
{
return _trigger
?? (_trigger = new Command(
() =>
{
IsSelected = !IsSelected;
}));
}
}
}
我已将code sample上传到github。请注意,我使用了INotifyPropertyChanged
而不是Mvvnlight nuget包。