Форматы Xamarin: как я могу добавить дополнение к кнопке?
У меня есть XAML Xamarin.Forms.Button
<Button Text="Cancel" BackgroundColor="#3079a8" TextColor="White" />
Я попытался добавить дополнение к нему через свойство Padding, но это не сработало. После проверки форумов и документов я понял, что в документации для Xamarin.Forms.Button (ссылка на документы) отсутствует свойство дополнения.
, есть ли какой-нибудь другой тип быстрого исправления, чтобы добавить только немного больше отступов к кнопке? Приветствуется пример кода.
Ответы
Ответ 1
Лучший способ сделать это - увеличить размер кнопки.
Затем выровняйте текст по своему усмотрению. К сожалению, это самое лучшее, что вы можете сделать. Он хорошо работает, если вы выравниваете свой текстовый центр. Не так много, если его выравнивание влево или вправо.
Ответ 2
Несмотря на то, что говорит Адам, это лучшее решение:
использование:
<controls:EnhancedButton Padding="1,2,3,4"/>
преимущества:
- отсутствие неприятных побочных эффектов
- нет проблем с выравниваниями
- Отсутствие уклонения от просмотра.
- без увеличения глубины просмотра
ИОС:
[assembly: ExportRenderer(typeof(EnhancedButton), typeof(EnhancedButtonRenderer))]
namespace YOURNAMESPACE.iOS
{
public class EnhancedButtonRenderer : ButtonRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
{
base.OnElementChanged(e);
UpdatePadding();
}
private void UpdatePadding()
{
var element = this.Element as EnhancedButton;
if (element != null)
{
this.Control.ContentEdgeInsets = new UIEdgeInsets(
(int)element.Padding.Top,
(int)element.Padding.Left,
(int)element.Padding.Bottom,
(int)element.Padding.Right
);
}
}
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
if (e.PropertyName == nameof(EnhancedButton.Padding))
{
UpdatePadding();
}
}
}
}
Android:
[assembly: ExportRenderer(typeof(EnhancedButton), typeof(EnhancedButtonRenderer))]
namespace YOURNAMESPACE.Droid
{
public class EnhancedButtonRenderer : ButtonRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
{
base.OnElementChanged(e);
UpdatePadding();
}
private void UpdatePadding()
{
var element = this.Element as EnhancedButton;
if (element != null)
{
this.Control.SetPadding(
(int)element.Padding.Left,
(int)element.Padding.Top,
(int)element.Padding.Right,
(int)element.Padding.Bottom
);
}
}
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
if (e.PropertyName == nameof(EnhancedButton.Padding))
{
UpdatePadding();
}
}
}
}
ПКЛ:
public class EnhancedButton : Button
{
#region Padding
public static BindableProperty PaddingProperty = BindableProperty.Create(nameof(Padding), typeof(Thickness), typeof(EnhancedButton), default(Thickness), defaultBindingMode:BindingMode.OneWay);
public Thickness Padding
{
get { return (Thickness) GetValue(PaddingProperty); }
set { SetValue(PaddingProperty, value); }
}
#endregion Padding
}
Ответ 3
вы можете обернуть свою кнопку в StackLayout и добавить дополнение к StackLayout
<StackLayout Padding="10,10,10,10">
<Button Text="Cancel" BackgroundColor="#3079a8" TextColor="White" />
</StackLayout>
Ответ 4
Самый простой способ -
![введите описание изображения здесь]()
<StackLayout Margin="0,20,0,0" Orientation="Horizontal" Spacing="20">
<Switch VerticalOptions="CenterAndExpand" ></Switch>
<Label VerticalOptions="CenterAndExpand" TextColor="White">Remember Me</Label>
<StackLayout HorizontalOptions="FillAndExpand"><Button VerticalOptions="CenterAndExpand" HorizontalOptions="FillAndExpand" Text="Sign In" TextColor="White" BackgroundColor="#5cb85c" ></Button>
</StackLayout>
</StackLayout>
[такая большая головная боль, работающая с формами xamarin: '(]
Ответ 5
Это не работает для меня в андроиде.
Смотря на функцию SetPadding, я вижу, что Control имеет минимальную высоту 132 и минимальную ширину 242.
Я изменил функцию SetPadding в:
private void SetPadding()
{
var element = Element as ExtendedButton;
if (element != null)
{
Control.SetMinHeight(-1);
Control.SetMinimumHeight(-1);
Control.SetMinWidth(-1);
Control.SetMinimumWidth(-1);
Control.SetPadding(
(int)element.Padding.Left,
(int)element.Padding.Top - 6,
(int)element.Padding.Right,
(int)element.Padding.Bottom - 6);
}
}