Issue4879 ImageButton Padding (UWP) (#5837)

* Apply ImageButton.Padding on UWP like other platforms

For #4879

* Apply ImageButton.Padding on UWP like other platforms

For #4879

* Apply ImageButton.Padding on UWP like other platforms

For #4879

* don't use obsolete property after rebasing to 4.0

fixes #4879
This commit is contained in:
Matt Lacey 2019-05-29 01:53:17 +01:00 коммит произвёл Samantha Houts
Родитель 442cb3e116
Коммит 7a0db78be9
3 изменённых файлов: 96 добавлений и 5 удалений

Просмотреть файл

@ -0,0 +1,86 @@
using System;
using System.Collections.Generic;
using System.Text;
using Xamarin.Forms.CustomAttributes;
using Xamarin.Forms.Internals;
#if UITEST
using NUnit.Framework;
using Xamarin.UITest;
using Xamarin.Forms.Core.UITests;
#endif
namespace Xamarin.Forms.Controls.Issues
{
[Preserve(AllMembers = true)]
[Issue(IssueTracker.Github, 4879, "4879 - ImageButtonPadding", PlatformAffected.UWP)]
public class Issue4879 : TestContentPage
{
protected override async void Init()
{
await Navigation.PushModalAsync(new Issue4879Page());
}
public class Issue4879Page : ContentPage
{
public Issue4879Page()
{
Button b = new Button
{
HorizontalOptions = LayoutOptions.End,
VerticalOptions = LayoutOptions.End,
ImageSource = "coffee.png",
Padding = new Thickness(10),
BackgroundColor = Color.Green
};
// Add BorderWidth to ImageButtons to match border of Button and allow for easier size comparisons
ImageButton ib1 = new ImageButton
{
HorizontalOptions = LayoutOptions.Start,
VerticalOptions = LayoutOptions.End,
BorderWidth = 2,
Source = "coffee.png",
Padding = new Thickness(10),
BackgroundColor = Color.Purple
};
ImageButton ib2 = new ImageButton
{
HorizontalOptions = LayoutOptions.End,
VerticalOptions = LayoutOptions.Start,
BorderWidth = 2,
Source = "coffee.png",
Padding = new Thickness(10),
BackgroundColor = Color.Red
};
Grid mainG = new Grid
{
ColumnDefinitions = {
new ColumnDefinition { Width = GridLength.Star },
new ColumnDefinition { Width = GridLength.Star }
},
RowDefinitions = {
new RowDefinition { Height = GridLength.Star },
new RowDefinition { Height = GridLength.Star }
}
};
// Green Button top left
// Purple ImageButton top right to compare height
// Red ImageButton bottom left to compare width
mainG.Children.Add(b, 0, 0);
mainG.Children.Add(ib1, 1, 0);
mainG.Children.Add(ib2, 0, 1);
Content = mainG;
}
}
#if UITEST
[Test]
[Category(UITestCategories.ManualReview)]
public void Issue4879Test()
{
RunningApp.Screenshot("I am at Issue 4879 - All buttons/images should be the same size.");
}
#endif
}
}

Просмотреть файл

@ -10,6 +10,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Compile Include="$(MSBuildThisFileDirectory)Helpers\GarbageCollectionHelper.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Helpers\GarbageCollectionHelper.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Issue4879.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Issue5555.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Issue5555.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Bugzilla59172.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla59172.cs" />
<Compile Include="$(MSBuildThisFileDirectory)FlagTestHelpers.cs" /> <Compile Include="$(MSBuildThisFileDirectory)FlagTestHelpers.cs" />

Просмотреть файл

@ -54,13 +54,16 @@ namespace Xamarin.Forms.Platform.UWP
_measured = true; _measured = true;
// we have to include the padding, otherwise the image is smaller than expected // The size needs to be the entire size needed for the button (including padding, borders, etc.)
var padding = new Size(Element.Padding.HorizontalThickness, Element.Padding.VerticalThickness); // Not just the size of the image.
var btn = Control;
btn.Measure(new Windows.Foundation.Size(widthConstraint, heightConstraint));
return new SizeRequest(_image.Source.GetImageSourceSize() + padding); var size = new Size(Math.Ceiling(btn.DesiredSize.Width), Math.Ceiling(btn.DesiredSize.Height));
return new SizeRequest(size);
} }
protected async override void OnElementChanged(ElementChangedEventArgs<ImageButton> e) protected async override void OnElementChanged(ElementChangedEventArgs<ImageButton> e)
{ {
base.OnElementChanged(e); base.OnElementChanged(e);
@ -205,7 +208,8 @@ namespace Xamarin.Forms.Platform.UWP
{ {
_image.Margin = new WThickness(0); _image.Margin = new WThickness(0);
Control.Padding = new WThickness( // Apply the padding to the containing button, not the image
_formsButton.Padding = new WThickness(
Element.Padding.Left, Element.Padding.Left,
Element.Padding.Top, Element.Padding.Top,
Element.Padding.Right, Element.Padding.Right,