summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.ControlGallery.WindowsUniversal
diff options
context:
space:
mode:
authorSamantha Houts <samantha@teamredwall.com>2017-03-03 04:41:04 -0800
committerRui Marinho <me@ruimarinho.net>2017-03-03 12:41:04 +0000
commitbc13d3cfeeea62214f0c6f434e5f21f7117e2e1a (patch)
tree5d2e471468e8f754e8e445d2588b0b5fc4508a3c /Xamarin.Forms.ControlGallery.WindowsUniversal
parent8871077f115e7ef4d15efaa418fd718089db42c7 (diff)
downloadxamarin-forms-bc13d3cfeeea62214f0c6f434e5f21f7117e2e1a.tar.gz
xamarin-forms-bc13d3cfeeea62214f0c6f434e5f21f7117e2e1a.tar.bz2
xamarin-forms-bc13d3cfeeea62214f0c6f434e5f21f7117e2e1a.zip
[Android] Don't crash if Control is accessed in Effect OnDetached when Page is Disposed. (#773)
* Add repro for 51505 * [Android] Don't dispose of EffectControlProvider * Oops
Diffstat (limited to 'Xamarin.Forms.ControlGallery.WindowsUniversal')
-rw-r--r--Xamarin.Forms.ControlGallery.WindowsUniversal/MainPage.xaml.cs92
1 files changed, 62 insertions, 30 deletions
diff --git a/Xamarin.Forms.ControlGallery.WindowsUniversal/MainPage.xaml.cs b/Xamarin.Forms.ControlGallery.WindowsUniversal/MainPage.xaml.cs
index 744e4d19..5f4ea08d 100644
--- a/Xamarin.Forms.ControlGallery.WindowsUniversal/MainPage.xaml.cs
+++ b/Xamarin.Forms.ControlGallery.WindowsUniversal/MainPage.xaml.cs
@@ -8,34 +8,59 @@ using Windows.UI.ViewManagement;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media;
+using Xamarin.Forms;
+using Xamarin.Forms.ControlGallery.WindowsUniversal;
using Xamarin.Forms.Controls;
using Xamarin.Forms.Platform.UWP;
+[assembly: ExportEffect(typeof(BorderEffect), "BorderEffect")]
namespace Xamarin.Forms.ControlGallery.WindowsUniversal
{
+ public class BorderEffect : PlatformEffect
+ {
+ protected override void OnAttached()
+ {
+ var control = Control as Control;
+ if (control == null)
+ return;
+
+ control.Background = new SolidColorBrush(Windows.UI.Colors.Aqua);
+ }
+
+ protected override void OnDetached()
+ {
+ var control = Control as Control;
+ if (control == null)
+ return;
+
+ control.Background = new SolidColorBrush(Windows.UI.Colors.Beige);
+ }
+ }
+
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class MainPage
- {
- public MainPage()
- {
- InitializeComponent();
+ {
+ public MainPage()
+ {
+ InitializeComponent();
- var app = new Controls.App ();
+ var app = new Controls.App();
// When the native control gallery loads up, it'll let us know so we can add the nested native controls
MessagingCenter.Subscribe<NestedNativeControlGalleryPage>(this, NestedNativeControlGalleryPage.ReadyForNativeControlsMessage, AddNativeControls);
-
+
// When the native binding gallery loads up, it'll let us know so we can set up the native bindings
- MessagingCenter.Subscribe<NativeBindingGalleryPage >(this, NativeBindingGalleryPage.ReadyForNativeBindingsMessage, AddNativeBindings);
+ MessagingCenter.Subscribe<NativeBindingGalleryPage>(this, NativeBindingGalleryPage.ReadyForNativeBindingsMessage, AddNativeBindings);
- LoadApplication (app);
- }
+ LoadApplication(app);
+ }
- void AddNativeControls (NestedNativeControlGalleryPage page)
+ void AddNativeControls(NestedNativeControlGalleryPage page)
{
- if (page.NativeControlsAdded) {
+ if (page.NativeControlsAdded)
+ {
return;
}
@@ -43,54 +68,59 @@ namespace Xamarin.Forms.ControlGallery.WindowsUniversal
// Create and add a native TextBlock
var originalText = "I am a native TextBlock";
- var textBlock = new TextBlock {
+ var textBlock = new TextBlock
+ {
Text = originalText,
FontSize = 14,
- FontFamily = new FontFamily ("HelveticaNeue")
+ FontFamily = new FontFamily("HelveticaNeue")
};
- sl?.Children.Add (textBlock);
+ sl?.Children.Add(textBlock);
// Create and add a native Button
var button = new Windows.UI.Xaml.Controls.Button { Content = "Toggle Font Size", Height = 80 };
button.Click += (sender, args) => { textBlock.FontSize = textBlock.FontSize == 14 ? 24 : 14; };
- sl?.Children.Add (button.ToView ());
+ sl?.Children.Add(button.ToView());
// Create a control which we know doesn't behave correctly with regard to measurement
- var difficultControl = new BrokenNativeControl {
+ var difficultControl = new BrokenNativeControl
+ {
Text = "Not Sized/Arranged Properly"
};
- var difficultControl2 = new BrokenNativeControl {
+ var difficultControl2 = new BrokenNativeControl
+ {
Text = "Fixed"
};
// Add the misbehaving controls, one with a custom delegate for ArrangeOverrideDelegate
- sl?.Children.Add (difficultControl);
- sl?.Children.Add (difficultControl2,
- arrangeOverrideDelegate: (renderer, finalSize) => {
- if (finalSize.Width <= 0 || double.IsInfinity (finalSize.Width)) {
+ sl?.Children.Add(difficultControl);
+ sl?.Children.Add(difficultControl2,
+ arrangeOverrideDelegate: (renderer, finalSize) =>
+ {
+ if (finalSize.Width <= 0 || double.IsInfinity(finalSize.Width))
+ {
return null;
}
FrameworkElement frameworkElement = renderer.Control;
- frameworkElement.Measure (finalSize);
+ frameworkElement.Measure(finalSize);
// The broken control always tries to size itself to the screen width
// So figure that out and we'll know how far off it's laying itself out
- Rect bounds = ApplicationView.GetForCurrentView ().VisibleBounds;
- double scaleFactor = DisplayInformation.GetForCurrentView ().RawPixelsPerViewPixel;
- var screenWidth = new Size (bounds.Width * scaleFactor, bounds.Height * scaleFactor);
-
+ Rect bounds = ApplicationView.GetForCurrentView().VisibleBounds;
+ double scaleFactor = DisplayInformation.GetForCurrentView().RawPixelsPerViewPixel;
+ var screenWidth = new Size(bounds.Width * scaleFactor, bounds.Height * scaleFactor);
+
// We can re-center it by offsetting it during the Arrange call
double diff = Math.Abs(screenWidth.Width - finalSize.Width) / -2;
- frameworkElement.Arrange (new Rect (diff, 0, finalSize.Width - diff, finalSize.Height));
+ frameworkElement.Arrange(new Rect(diff, 0, finalSize.Width - diff, finalSize.Height));
// Arranging the control to the left will make it show up past the edge of the stack layout
// We can fix that by clipping it manually
- var clip = new RectangleGeometry { Rect = new Rect (-diff, 0, finalSize.Width, finalSize.Height) };
+ var clip = new RectangleGeometry { Rect = new Rect(-diff, 0, finalSize.Width, finalSize.Height) };
frameworkElement.Clip = clip;
return finalSize;
@@ -107,12 +137,14 @@ namespace Xamarin.Forms.ControlGallery.WindowsUniversal
StackLayout sl = page.Layout;
- var txbLabel = new TextBlock {
+ var txbLabel = new TextBlock
+ {
FontSize = 14,
FontFamily = new FontFamily("HelveticaNeue")
};
- var txbBox = new TextBox {
+ var txbBox = new TextBox
+ {
FontSize = 14,
FontFamily = new FontFamily("HelveticaNeue")
};