зеркало из https://github.com/DeGsoft/maui-linux.git
[C] unify Padding into IPaddingElement (#1276)
This commit is contained in:
Родитель
b3a0e1f14f
Коммит
20ef50d1d3
|
@ -5,7 +5,7 @@ namespace Xamarin.Forms
|
||||||
{
|
{
|
||||||
[ContentProperty("Content")]
|
[ContentProperty("Content")]
|
||||||
[RenderWith(typeof(_FrameRenderer))]
|
[RenderWith(typeof(_FrameRenderer))]
|
||||||
public class Frame : ContentView, IElementConfiguration<Frame>
|
public class Frame : ContentView, IElementConfiguration<Frame>, IPaddingElement
|
||||||
{
|
{
|
||||||
public static readonly BindableProperty OutlineColorProperty = BindableProperty.Create("OutlineColor", typeof(Color), typeof(Frame), Color.Default);
|
public static readonly BindableProperty OutlineColorProperty = BindableProperty.Create("OutlineColor", typeof(Color), typeof(Frame), Color.Default);
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ namespace Xamarin.Forms
|
||||||
_platformConfigurationRegistry = new Lazy<PlatformConfigurationRegistry<Frame>>(() => new PlatformConfigurationRegistry<Frame>(this));
|
_platformConfigurationRegistry = new Lazy<PlatformConfigurationRegistry<Frame>>(() => new PlatformConfigurationRegistry<Frame>(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override Thickness CreateDefaultPadding()
|
Thickness IPaddingElement.PaddingDefaultValueCreator()
|
||||||
{
|
{
|
||||||
return 20d;
|
return 20d;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
namespace Xamarin.Forms
|
||||||
|
{
|
||||||
|
interface IPaddingElement
|
||||||
|
{
|
||||||
|
//note to implementor: implement this property publicly
|
||||||
|
Thickness Padding { get; }
|
||||||
|
|
||||||
|
//note to implementor: but implement this method explicitly
|
||||||
|
void OnPaddingPropertyChanged(Thickness oldValue, Thickness newValue);
|
||||||
|
Thickness PaddingDefaultValueCreator();
|
||||||
|
}
|
||||||
|
}
|
|
@ -50,16 +50,11 @@ namespace Xamarin.Forms
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract class Layout : View, ILayout, ILayoutController
|
public abstract class Layout : View, ILayout, ILayoutController, IPaddingElement
|
||||||
{
|
{
|
||||||
public static readonly BindableProperty IsClippedToBoundsProperty = BindableProperty.Create("IsClippedToBounds", typeof(bool), typeof(Layout), false);
|
public static readonly BindableProperty IsClippedToBoundsProperty = BindableProperty.Create("IsClippedToBounds", typeof(bool), typeof(Layout), false);
|
||||||
|
|
||||||
public static readonly BindableProperty PaddingProperty = BindableProperty.Create("Padding", typeof(Thickness), typeof(Layout), default(Thickness),
|
public static readonly BindableProperty PaddingProperty = PaddingElement.PaddingProperty;
|
||||||
propertyChanged: (bindable, old, newValue) =>
|
|
||||||
{
|
|
||||||
var layout = (Layout)bindable;
|
|
||||||
layout.UpdateChildrenLayout();
|
|
||||||
}, defaultValueCreator: (bindable) => ((Layout)bindable).CreateDefaultPadding());
|
|
||||||
|
|
||||||
static IList<KeyValuePair<Layout, int>> s_resolutionList = new List<KeyValuePair<Layout, int>>();
|
static IList<KeyValuePair<Layout, int>> s_resolutionList = new List<KeyValuePair<Layout, int>>();
|
||||||
static bool s_relayoutInProgress;
|
static bool s_relayoutInProgress;
|
||||||
|
@ -87,15 +82,20 @@ namespace Xamarin.Forms
|
||||||
|
|
||||||
public Thickness Padding
|
public Thickness Padding
|
||||||
{
|
{
|
||||||
get { return (Thickness)GetValue(PaddingProperty); }
|
get { return (Thickness)GetValue(PaddingElement.PaddingProperty); }
|
||||||
set { SetValue(PaddingProperty, value); }
|
set { SetValue(PaddingElement.PaddingProperty, value); }
|
||||||
}
|
}
|
||||||
|
|
||||||
internal virtual Thickness CreateDefaultPadding()
|
Thickness IPaddingElement.PaddingDefaultValueCreator()
|
||||||
{
|
{
|
||||||
return default(Thickness);
|
return default(Thickness);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void IPaddingElement.OnPaddingPropertyChanged(Thickness oldValue, Thickness newValue)
|
||||||
|
{
|
||||||
|
UpdateChildrenLayout();
|
||||||
|
}
|
||||||
|
|
||||||
internal ObservableCollection<Element> InternalChildren { get; } = new ObservableCollection<Element>();
|
internal ObservableCollection<Element> InternalChildren { get; } = new ObservableCollection<Element>();
|
||||||
|
|
||||||
internal override ReadOnlyCollection<Element> LogicalChildrenInternal
|
internal override ReadOnlyCollection<Element> LogicalChildrenInternal
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
namespace Xamarin.Forms
|
||||||
|
{
|
||||||
|
static class PaddingElement
|
||||||
|
{
|
||||||
|
public static readonly BindableProperty PaddingProperty =
|
||||||
|
BindableProperty.Create(nameof(IPaddingElement.Padding), typeof(Thickness), typeof(IPaddingElement), default(Thickness),
|
||||||
|
propertyChanged: OnPaddingPropertyChanged,
|
||||||
|
defaultValueCreator: PaddingDefaultValueCreator);
|
||||||
|
|
||||||
|
static void OnPaddingPropertyChanged(BindableObject bindable, object oldValue, object newValue)
|
||||||
|
{
|
||||||
|
((IPaddingElement)bindable).OnPaddingPropertyChanged((Thickness)oldValue, (Thickness)newValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
static object PaddingDefaultValueCreator(BindableObject bindable)
|
||||||
|
{
|
||||||
|
return ((IPaddingElement)bindable).PaddingDefaultValueCreator();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static readonly BindableProperty PaddingLeftProperty =
|
||||||
|
BindableProperty.Create("PaddingLeft", typeof(double), typeof(IPaddingElement), default(double),
|
||||||
|
propertyChanged: OnPaddingLeftChanged);
|
||||||
|
|
||||||
|
static void OnPaddingLeftChanged(BindableObject bindable, object oldValue, object newValue)
|
||||||
|
{
|
||||||
|
var padding = (Thickness)bindable.GetValue(PaddingProperty);
|
||||||
|
padding.Left = (double)newValue;
|
||||||
|
bindable.SetValue(PaddingProperty, padding);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static readonly BindableProperty PaddingTopProperty =
|
||||||
|
BindableProperty.Create("PaddingTop", typeof(double), typeof(IPaddingElement), default(double),
|
||||||
|
propertyChanged: OnPaddingTopChanged);
|
||||||
|
|
||||||
|
static void OnPaddingTopChanged(BindableObject bindable, object oldValue, object newValue)
|
||||||
|
{
|
||||||
|
var padding = (Thickness)bindable.GetValue(PaddingProperty);
|
||||||
|
padding.Top = (double)newValue;
|
||||||
|
bindable.SetValue(PaddingProperty, padding);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static readonly BindableProperty PaddingRightProperty =
|
||||||
|
BindableProperty.Create("PaddingRight", typeof(double), typeof(IPaddingElement), default(double),
|
||||||
|
propertyChanged: OnPaddingRightChanged);
|
||||||
|
|
||||||
|
static void OnPaddingRightChanged(BindableObject bindable, object oldValue, object newValue)
|
||||||
|
{
|
||||||
|
var padding = (Thickness)bindable.GetValue(PaddingProperty);
|
||||||
|
padding.Right = (double)newValue;
|
||||||
|
bindable.SetValue(PaddingProperty, padding);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static readonly BindableProperty PaddingBottomProperty =
|
||||||
|
BindableProperty.Create("PaddingBottom", typeof(double), typeof(IPaddingElement), default(double),
|
||||||
|
propertyChanged: OnPaddingBottomChanged);
|
||||||
|
|
||||||
|
static void OnPaddingBottomChanged(BindableObject bindable, object oldValue, object newValue)
|
||||||
|
{
|
||||||
|
var padding = (Thickness)bindable.GetValue(PaddingProperty);
|
||||||
|
padding.Bottom = (double)newValue;
|
||||||
|
bindable.SetValue(PaddingProperty, padding);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -12,7 +12,7 @@ using Xamarin.Forms.Platform;
|
||||||
namespace Xamarin.Forms
|
namespace Xamarin.Forms
|
||||||
{
|
{
|
||||||
[RenderWith(typeof(_PageRenderer))]
|
[RenderWith(typeof(_PageRenderer))]
|
||||||
public class Page : VisualElement, ILayout, IPageController, IElementConfiguration<Page>
|
public class Page : VisualElement, ILayout, IPageController, IElementConfiguration<Page>, IPaddingElement
|
||||||
{
|
{
|
||||||
public const string BusySetSignalName = "Xamarin.BusySet";
|
public const string BusySetSignalName = "Xamarin.BusySet";
|
||||||
|
|
||||||
|
@ -26,11 +26,7 @@ namespace Xamarin.Forms
|
||||||
|
|
||||||
public static readonly BindableProperty IsBusyProperty = BindableProperty.Create("IsBusy", typeof(bool), typeof(Page), false, propertyChanged: (bo, o, n) => ((Page)bo).OnPageBusyChanged());
|
public static readonly BindableProperty IsBusyProperty = BindableProperty.Create("IsBusy", typeof(bool), typeof(Page), false, propertyChanged: (bo, o, n) => ((Page)bo).OnPageBusyChanged());
|
||||||
|
|
||||||
public static readonly BindableProperty PaddingProperty = BindableProperty.Create("Padding", typeof(Thickness), typeof(Page), default(Thickness), propertyChanged: (bindable, old, newValue) =>
|
public static readonly BindableProperty PaddingProperty = PaddingElement.PaddingProperty;
|
||||||
{
|
|
||||||
var layout = (Page)bindable;
|
|
||||||
layout.UpdateChildrenLayout();
|
|
||||||
});
|
|
||||||
|
|
||||||
public static readonly BindableProperty TitleProperty = BindableProperty.Create("Title", typeof(string), typeof(Page), null);
|
public static readonly BindableProperty TitleProperty = BindableProperty.Create("Title", typeof(string), typeof(Page), null);
|
||||||
|
|
||||||
|
@ -76,8 +72,18 @@ namespace Xamarin.Forms
|
||||||
|
|
||||||
public Thickness Padding
|
public Thickness Padding
|
||||||
{
|
{
|
||||||
get { return (Thickness)GetValue(PaddingProperty); }
|
get { return (Thickness)GetValue(PaddingElement.PaddingProperty); }
|
||||||
set { SetValue(PaddingProperty, value); }
|
set { SetValue(PaddingElement.PaddingProperty, value); }
|
||||||
|
}
|
||||||
|
|
||||||
|
Thickness IPaddingElement.PaddingDefaultValueCreator()
|
||||||
|
{
|
||||||
|
return default(Thickness);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IPaddingElement.OnPaddingPropertyChanged(Thickness oldValue, Thickness newValue)
|
||||||
|
{
|
||||||
|
UpdateChildrenLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Title
|
public string Title
|
||||||
|
|
|
@ -476,6 +476,8 @@
|
||||||
<Compile Include="ReferenceTypeConverter.cs" />
|
<Compile Include="ReferenceTypeConverter.cs" />
|
||||||
<Compile Include="ITextAlignmentElement.cs" />
|
<Compile Include="ITextAlignmentElement.cs" />
|
||||||
<Compile Include="TextAlignmentElement.cs" />
|
<Compile Include="TextAlignmentElement.cs" />
|
||||||
|
<Compile Include="PaddingElement.cs" />
|
||||||
|
<Compile Include="IPaddingElement.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
|
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
Загрузка…
Ссылка в новой задаче