Stop using XAML for editor sample
This commit is contained in:
parent
80dc2bfaf9
commit
1f5b1fe13a
|
@ -32,9 +32,6 @@
|
|||
<Compile Update="DisplayAlertPage.xaml.cs">
|
||||
<DependentUpon>DisplayAlertPage.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Update="XamlPreviewPage.xaml.cs">
|
||||
<DependentUpon>XamlPreviewPage.xaml</DependentUpon>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
@ -56,9 +53,6 @@
|
|||
<EmbeddedResource Update="WeatherApp\WeatherPage.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Update="XamlPreviewPage.xaml">
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -1,22 +0,0 @@
|
|||
<?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="Samples.XamlPreviewPage">
|
||||
<ContentPage.Content>
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="auto" />
|
||||
<RowDefinition Height="*" />
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<StackLayout Orientation="Vertical" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2">
|
||||
<Label Text="Xamarin.Forms XAML Editor" FontSize="24" FontAttributes="Bold" Margin="8,8,8,0" />
|
||||
<Label Text="Edit the XAML below to see a live preview on the right" Margin="8,0,8,8" />
|
||||
</StackLayout>
|
||||
<Editor x:Name="editor" FontFamily="monospace" FontSize="12" Grid.Row="1" Grid.Column="0" />
|
||||
<ContentView x:Name="results" Grid.Row="1" Grid.Column="1" BackgroundColor="White" />
|
||||
</Grid>
|
||||
</ContentPage.Content>
|
||||
</ContentPage>
|
|
@ -1,72 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
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>
|
||||
<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"" />
|
||||
</Grid>
|
||||
</ContentView>";
|
||||
editor.TextChanged += (sender, e) => DisplayXaml ();
|
||||
DisplayXaml ();
|
||||
}
|
||||
|
||||
CancellationTokenSource lastCts = null;
|
||||
|
||||
public void DisplayXaml ()
|
||||
{
|
||||
try {
|
||||
var cts = new CancellationTokenSource ();
|
||||
var token = cts.Token;
|
||||
lastCts?.Cancel ();
|
||||
lastCts = cts;
|
||||
|
||||
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 });
|
||||
|
||||
if (!token.IsCancellationRequested) {
|
||||
results.Content = contentView;
|
||||
}
|
||||
}
|
||||
catch (OperationCanceledException) {
|
||||
}
|
||||
catch (Exception ex) {
|
||||
results.Content = new Label {
|
||||
TextColor = Color.DarkRed,
|
||||
FontSize = 12,
|
||||
Text = ex.ToString (),
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,6 +1,7 @@
|
|||
using System;
|
||||
|
||||
using System.Threading;
|
||||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.Xaml;
|
||||
|
||||
namespace Samples
|
||||
{
|
||||
|
@ -10,8 +11,108 @@ namespace Samples
|
|||
|
||||
public Ooui.Element CreateElement ()
|
||||
{
|
||||
var page = new XamlPreviewPage ();
|
||||
var page = new XamlEditorPage ();
|
||||
return page.GetOouiElement ();
|
||||
}
|
||||
}
|
||||
|
||||
public partial class XamlEditorPage : ContentPage
|
||||
{
|
||||
Editor editor;
|
||||
ContentView results;
|
||||
|
||||
public XamlEditorPage ()
|
||||
{
|
||||
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>
|
||||
<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"" />
|
||||
</Grid>
|
||||
</ContentView>";
|
||||
editor.TextChanged += (sender, e) => DisplayXaml ();
|
||||
DisplayXaml ();
|
||||
}
|
||||
|
||||
void InitializeComponent ()
|
||||
{
|
||||
var grid = new Grid ();
|
||||
|
||||
grid.RowDefinitions.Add (new RowDefinition { Height = GridLength.Auto });
|
||||
grid.RowDefinitions.Add (new RowDefinition { Height = GridLength.Star });
|
||||
grid.ColumnDefinitions.Add (new ColumnDefinition { Width = GridLength.Star });
|
||||
grid.ColumnDefinitions.Add (new ColumnDefinition { Width = GridLength.Star });
|
||||
|
||||
editor = new Editor {
|
||||
FontSize = 12,
|
||||
FontFamily = "monospace",
|
||||
};
|
||||
editor.SetValue (Grid.ColumnProperty, 0);
|
||||
editor.SetValue (Grid.RowProperty, 1);
|
||||
|
||||
results = new ContentView ();
|
||||
results.SetValue (Grid.ColumnProperty, 1);
|
||||
results.SetValue (Grid.RowProperty, 1);
|
||||
|
||||
var title = new Label {
|
||||
Text = "XAML Editor",
|
||||
FontSize = 24,
|
||||
FontAttributes = FontAttributes.Bold,
|
||||
Margin = new Thickness (8),
|
||||
};
|
||||
title.SetValue (Grid.ColumnProperty, 0);
|
||||
title.SetValue (Grid.RowProperty, 0);
|
||||
|
||||
grid.Children.Add (title);
|
||||
grid.Children.Add (editor);
|
||||
grid.Children.Add (results);
|
||||
|
||||
Content = grid;
|
||||
}
|
||||
|
||||
CancellationTokenSource lastCts = null;
|
||||
|
||||
public void DisplayXaml ()
|
||||
{
|
||||
try {
|
||||
var cts = new CancellationTokenSource ();
|
||||
var token = cts.Token;
|
||||
lastCts?.Cancel ();
|
||||
lastCts = cts;
|
||||
|
||||
var contentView = new ContentView ();
|
||||
contentView.LoadFromXaml (editor.Text);
|
||||
|
||||
if (!token.IsCancellationRequested) {
|
||||
results.Content = contentView;
|
||||
}
|
||||
}
|
||||
catch (OperationCanceledException) {
|
||||
}
|
||||
catch (Exception ex) {
|
||||
results.Content = new Label {
|
||||
TextColor = Color.DarkRed,
|
||||
FontSize = 12,
|
||||
Text = ex.ToString (),
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue