Ooui-tws-port/Samples/XamlPreviewPage.xaml.cs

73 lines
2.6 KiB
C#
Raw Normal View History

2017-11-26 19:30:19 +00:00
using System;
using System.Collections.Generic;
2017-12-11 04:37:16 +00:00
using System.Threading;
2017-11-26 19:30:19 +00:00
using Xamarin.Forms;
namespace Samples
{
public partial class XamlPreviewPage : ContentPage
{
public XamlPreviewPage ()
{
InitializeComponent ();
editor.Text = @"<ContentView
xmlns=""http://xamarin.com/schemas/2014/forms""
xmlns:x=""http://schemas.microsoft.com/winfx/2009/xaml"">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height=""*"" />
<RowDefinition Height=""*"" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width=""*"" />
<ColumnDefinition Width=""*"" />
</Grid.ColumnDefinitions>
2017-12-11 04:17:35 +00:00
<StackLayout Grid.Row=""0"" Grid.Column=""0"">
<Label Text=""Top Left"" />
<Entry Placeholder=""I'm ready for some text"" />
<Button Text=""I'm a button, but I don't do anything"" />
</StackLayout>
<Label Text=""Top Right"" Grid.Row=""0"" Grid.Column=""1"" TextColor=""White"" BackgroundColor=""#c5000b"" />
<Label Text=""Bottom Left"" Grid.Row=""1"" Grid.Column=""0"" TextColor=""Black"" BackgroundColor=""#ffd320"" />
<Label Text=""Bottom Right"" Grid.Row=""1"" Grid.Column=""1"" TextColor=""White"" BackgroundColor=""#008000"" />
2017-11-26 19:30:19 +00:00
</Grid>
</ContentView>";
2017-11-26 20:18:33 +00:00
editor.TextChanged += (sender, e) => DisplayXaml ();
2017-11-26 19:30:19 +00:00
DisplayXaml ();
}
2017-12-11 04:37:16 +00:00
CancellationTokenSource lastCts = null;
2017-11-26 19:30:19 +00:00
public void DisplayXaml ()
{
2017-11-26 20:18:33 +00:00
try {
2017-12-11 04:37:16 +00:00
var cts = new CancellationTokenSource ();
var token = cts.Token;
lastCts?.Cancel ();
lastCts = cts;
2017-11-26 20:18:33 +00:00
var asm = typeof (Xamarin.Forms.Xaml.Internals.XamlTypeResolver).Assembly;
var xamlLoaderType = asm.GetType ("Xamarin.Forms.Xaml.XamlLoader");
var loadArgTypes = new[] { typeof (object), typeof (string) };
var loadMethod = xamlLoaderType.GetMethod ("Load", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public, null, System.Reflection.CallingConventions.Any, loadArgTypes, null);
var contentView = new ContentView ();
loadMethod.Invoke (null, new object[] { contentView, editor.Text });
2017-12-11 04:37:16 +00:00
if (!token.IsCancellationRequested) {
results.Content = contentView;
}
}
catch (OperationCanceledException) {
2017-11-26 20:18:33 +00:00
}
catch (Exception ex) {
results.Content = new Label {
2017-12-11 04:37:16 +00:00
TextColor = Color.DarkRed,
FontSize = 12,
2017-11-26 20:18:33 +00:00
Text = ex.ToString (),
};
}
2017-11-26 19:30:19 +00:00
}
}
}