diff options
Diffstat (limited to 'Xamarin.Forms.ControlGallery.Windows/BrokenNativeControl.cs')
-rw-r--r-- | Xamarin.Forms.ControlGallery.Windows/BrokenNativeControl.cs | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/Xamarin.Forms.ControlGallery.Windows/BrokenNativeControl.cs b/Xamarin.Forms.ControlGallery.Windows/BrokenNativeControl.cs new file mode 100644 index 00000000..02536301 --- /dev/null +++ b/Xamarin.Forms.ControlGallery.Windows/BrokenNativeControl.cs @@ -0,0 +1,64 @@ +using Windows.Foundation; +using Windows.Graphics.Display; +using Windows.UI; +using Windows.UI.ViewManagement; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Media; + +namespace Xamarin.Forms.ControlGallery.Windows +{ + internal class BrokenNativeControl : Panel + { + public BrokenNativeControl () + { + _textBlock = new TextBlock { + MinHeight = 0, + MaxHeight = double.PositiveInfinity, + MinWidth = 0, + MaxWidth = double.PositiveInfinity, + FontSize = 24, + HorizontalAlignment = HorizontalAlignment.Center + }; + + Children.Add (_textBlock); + + Background = + new LinearGradientBrush ( + new GradientStopCollection { new GradientStop { Color = Colors.Green, Offset = 0.5}, new GradientStop { Color = Colors.Blue, Offset = 1} }, 0); + } + + public static readonly DependencyProperty TextProperty = DependencyProperty.Register ( + "Text", typeof(string), typeof(BrokenNativeControl), new PropertyMetadata (default(string), PropertyChangedCallback)); + + static void PropertyChangedCallback (DependencyObject dependencyObject, + DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs) + { + ((BrokenNativeControl)dependencyObject)._textBlock.Text = (string)dependencyPropertyChangedEventArgs.NewValue; + } + + public string Text + { + get { return (string)GetValue (TextProperty); } + set { SetValue (TextProperty, value); } + } + + readonly TextBlock _textBlock; + + protected override global::Windows.Foundation.Size ArrangeOverride(global::Windows.Foundation.Size finalSize) + { + _textBlock.Arrange(new Rect(0, 0, finalSize.Width, finalSize.Height)); + return finalSize; + } + + protected override global::Windows.Foundation.Size MeasureOverride (global::Windows.Foundation.Size availableSize) + { + _textBlock.Measure (availableSize); + + // This deliberately does something wrong so we can demo fixing it + var width = Window.Current.Bounds.Width * (int)DisplayProperties.ResolutionScale / 100; + + return new global::Windows.Foundation.Size (width, _textBlock.DesiredSize.Height); + } + } +}
\ No newline at end of file |