我有一个用Xamarin.Forms构建的跨平台应用程序,我需要在所有平台上访问相机,所以我下载并设置了Xam.Plugin.Media,这是每个设备本机相机应用程序的跨平台实现。但是当我将它实现到我的项目并运行它时,我得到以下异常:
Exception thrown: 'Windows.UI.Xaml.Markup.XamlParseException' in Plugin.Media.DLL
Exception thrown: 'Windows.UI.Xaml.Markup.XamlParseException' in mscorlib.ni.dll
Exception: Windows.UI.Xaml.Markup.XamlParseException: XAML parsing failed.
at Windows.UI.Xaml.Application.LoadComponent(Object component, Uri resourceLocator, ComponentResourceLocation componentResourceLocation)
at DMX.Helper.CameraCaptureUI.InitializeComponent()
at DMX.Helper.CameraCaptureUI..ctor()
at Plugin.Media.MediaImplementation.d__16.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at App.UploadImagePage.d__6.MoveNext()
这是我的Xaml这个页面:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="App.UploadImagePage"
BackgroundColor="Blue"
BackgroundImage="Images/background.png"
Title="Upload Image Page">
<AbsoluteLayout VerticalOptions="FillAndExpand"
HorizontalOptions="FillAndExpand">
<StackLayout AbsoluteLayout.LayoutBounds="0, 0, 1, .4"
AbsoluteLayout.LayoutFlags="All"
VerticalOptions="Center" >
<Grid BackgroundColor="#005dab">
<Label Text="Upload Image"
TextColor="White"
FontSize="Medium"
VerticalOptions="Center"
HorizontalOptions="Center"
BackgroundColor="#005dab"
/>
<Button Image="Images/logout.png" Clicked="LogoutButton_OnClicked"
HorizontalOptions="End"
BorderColor="#005dab"/>
</Grid>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button x:Name="CreditButton" Grid.Row="0" Grid.Column="0" Clicked="CreditButton_OnClicked"
Text=" Credit Applications "
BackgroundColor="#005dab"
TextColor="White"
BorderColor="#005dab"
HorizontalOptions="End"
/>
<Button x:Name="SalesButton" Grid.Row="0" Grid.Column="1" Clicked="SalesButton_OnClicked"
Text=" Sales Agreements "
BackgroundColor="White"
TextColor="#005dab"
BorderColor="White"
HorizontalOptions="Start"
/>
</Grid>
</StackLayout>
<Grid AbsoluteLayout.LayoutBounds="0.5, 0.5, 1, .75"
AbsoluteLayout.LayoutFlags="All"
>
<StackLayout Padding="10"
Spacing="15"
VerticalOptions="Center" >
<Image Source="Images/pdf_icon.png"/>
<Label Text="Insert Your PDF"
HorizontalOptions="Center"
FontSize="Medium"
FontAttributes="Bold"
TextColor="#005dab"/>
</StackLayout>
</Grid>
<Grid AbsoluteLayout.LayoutBounds=".98, .95, .98, .05"
AbsoluteLayout.LayoutFlags="All"
>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0" Text="0 Images"
HorizontalOptions="Start"
FontSize="Medium"
TextColor="Black"/>
<Button Grid.Row="0" Grid.Column="1" Clicked="UploadButton_OnClicked"
Text=" Upload Photo "
BackgroundColor="#005dab"
TextColor="White"
BorderColor="#005dab"
HorizontalOptions="End"
/>
</Grid>
</Grid>
</AbsoluteLayout>
</ContentPage>
这是背后的代码:
private async void camera()
{
try
{
Image image = new Image();
await CrossMedia.Current.Initialize();
if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
{
DisplayAlert("No Camera", ":( No camera available.", "OK");
return;
}
var file = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
{
Directory = "Sample",
Name = "test.jpg"
});
if (file == null)
return;
await DisplayAlert("File Location", file.Path, "OK");
image.Source = ImageSource.FromStream(() =>
{
var stream = file.GetStream();
file.Dispose();
return stream;
});
}
catch (Exception e)
{
Debug.WriteLine("Exception: " + e);
}
}