Xamarin.Forms ImageButton
ImageButton отображает изображение и реагирует на касание или щелчок, который направляет приложение для выполнения определенной задачи.
Представление ImageButton
объединяет Button
представление и Image
представление для создания кнопки, содержимое которой является изображением. Пользователь нажимает ImageButton
пальцем или щелкает его мышью, чтобы направить приложение для выполнения конкретной задачи. Однако, в отличие от Button
представления, ImageButton
представление не имеет понятия о виде текста и текста.
Примечание.
Button
Хотя представление определяет Image
свойство, которое позволяет отображать изображение на Button
объекте, это свойство предназначено для отображения небольшого значка рядом с текстомButton
.
Настройка источника изображения
ImageButton
определяет Source
свойство, которое должно быть задано изображением для отображения в кнопке, при этом источник изображения является файлом, URI, ресурсом или потоком. Дополнительные сведения о загрузке изображений из разных источников см. в разделе "Изображения".Xamarin.Forms
В следующем примере показано, как создать экземпляр в ImageButton
XAML:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="FormsGallery.XamlExamples.ImageButtonDemoPage"
Title="ImageButton Demo">
<StackLayout>
<Label Text="ImageButton"
FontSize="50"
FontAttributes="Bold"
HorizontalOptions="Center" />
<ImageButton Source="XamarinLogo.png"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand" />
</StackLayout>
</ContentPage>
Свойство Source
указывает изображение, которое отображается в объекте ImageButton
. В этом примере для него задан локальный файл, который будет загружен из каждого проекта платформы, что приводит к следующим снимкам экрана:
По умолчанию прямоугольный ImageButton
, но вы можете дать ему округленные углы с помощью CornerRadius
свойства. Дополнительные сведения о внешнем виде см. в ImageButton
разделе "Внешний вид ImageButton".
Примечание.
ImageButton
Хотя можно загрузить анимированный GIF-файл, он будет отображать только первый кадр GIF.
В следующем примере показано, как создать страницу, которая функционально эквивалентна предыдущему примеру XAML, но полностью в C#:
public class ImageButtonDemoPage : ContentPage
{
public ImageButtonDemoPage()
{
Label header = new Label
{
Text = "ImageButton",
FontSize = 50,
FontAttributes = FontAttributes.Bold,
HorizontalOptions = LayoutOptions.Center
};
ImageButton imageButton = new ImageButton
{
Source = "XamarinLogo.png",
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.CenterAndExpand
};
// Build the page.
Title = "ImageButton Demo";
Content = new StackLayout
{
Children = { header, imageButton }
};
}
}
Обработка щелчков ImageButton
ImageButton
определяет событие, которое запускается, когда пользователь нажимает Clicked
ImageButton
указатель мыши или пальцем. Событие запускается при освобождении пальца или кнопки мыши из поверхности.ImageButton
Для ImageButton
ответа на касания должны быть заданы true
его IsEnabled
свойства.
В следующем примере показано, как создать экземпляр xaml ImageButton
и обработать его Clicked
событие:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="FormsGallery.XamlExamples.ImageButtonDemoPage"
Title="ImageButton Demo">
<StackLayout>
<Label Text="ImageButton"
FontSize="50"
FontAttributes="Bold"
HorizontalOptions="Center" />
<ImageButton Source="XamarinLogo.png"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand"
Clicked="OnImageButtonClicked" />
<Label x:Name="label"
Text="0 ImageButton clicks"
FontSize="Large"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand" />
</StackLayout>
</ContentPage>
Событие Clicked
имеет имя обработчика OnImageButtonClicked
событий, который находится в файле программной части:
public partial class ImageButtonDemoPage : ContentPage
{
int clickTotal;
public ImageButtonDemoPage()
{
InitializeComponent();
}
void OnImageButtonClicked(object sender, EventArgs e)
{
clickTotal += 1;
label.Text = $"{clickTotal} ImageButton click{(clickTotal == 1 ? "" : "s")}";
}
}
При касании ImageButton
выполняется метод OnImageButtonClicked
. Аргумент sender
отвечает ImageButton
за это событие. Это можно использовать для доступа к объекту ImageButton
или для различения нескольких ImageButton
объектов, использующих одно и то же Clicked
событие.
Этот конкретный Clicked
обработчик увеличивает счетчик и отображает значение счетчика Label
в :
В следующем примере показано, как создать страницу, которая функционально эквивалентна предыдущему примеру XAML, но полностью в C#:
public class ImageButtonDemoPage : ContentPage
{
Label label;
int clickTotal = 0;
public ImageButtonDemoPage()
{
Label header = new Label
{
Text = "ImageButton",
FontSize = 50,
FontAttributes = FontAttributes.Bold,
HorizontalOptions = LayoutOptions.Center
};
ImageButton imageButton = new ImageButton
{
Source = "XamarinLogo.png",
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.CenterAndExpand
};
imageButton.Clicked += OnImageButtonClicked;
label = new Label
{
Text = "0 ImageButton clicks",
FontSize = Device.GetNamedSize(NamedSize.Large, typeof(Label)),
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.CenterAndExpand
};
// Build the page.
Title = "ImageButton Demo";
Content = new StackLayout
{
Children =
{
header,
imageButton,
label
}
};
}
void OnImageButtonClicked(object sender, EventArgs e)
{
clickTotal += 1;
label.Text = $"{clickTotal} ImageButton click{(clickTotal == 1 ? "" : "s")}";
}
}
Отключение ImageButton
Иногда приложение находится в определенном состоянии, в котором конкретный ImageButton
щелчок не является допустимой операцией. В таких случаях следует отключить, ImageButton
задав для свойства значение false
IsEnabled
.
Использование интерфейса команды
Приложение может реагировать на ImageButton
касания без обработки Clicked
события. Реализует ImageButton
альтернативный механизм уведомлений, называемый командой или интерфейсом команд . Это состоит из двух свойств:
Command
типICommand
, интерфейс, определенныйSystem.Windows.Input
в пространстве имен.CommandParameter
свойство типаObject
.
Этот подход подходит в связи с привязкой данных и особенно при реализации архитектуры Model-View-ViewModel (MVVM).
Дополнительные сведения об использовании командного интерфейса см. в руководстве "Кнопка" с помощью командного интерфейса.
Нажатие и освобождение ImageButton
Помимо события Clicked
ImageButton
также определяет события Pressed
и Released
. Это Pressed
событие возникает, когда пальцем нажимает клавишу ImageButton
, или кнопка мыши нажимается указателем, расположенным над ним ImageButton
. Событие Released
возникает при освобождении пальца или кнопки мыши. Как правило, Clicked
событие также запускается Released
одновременно с событием, но если указатель мыши или пальцем скользит от поверхности ImageButton
перед освобождением, Clicked
событие может не произойти.
Дополнительные сведения об этих событиях см. в разделе "Нажатие и освобождение кнопки" в руководстве по кнопке.
Внешний вид ImageButton
Помимо свойств, наследующих ImageButton
от View
класса, также определяет несколько свойств, ImageButton
влияющих на его внешний вид:
Aspect
способ масштабирования изображения в соответствии с областью отображения.BorderColor
— это цвет области вокругImageButton
.BorderWidth
— ширина границы.CornerRadius
— это угловой радиусImageButton
объекта .
Свойство Aspect
можно задать для одного из членов Aspect
перечисления:
Fill
— растягивает изображение, чтобы полностью заполнить егоImageButton
. Это может привести к искажению изображения.AspectFill
— клипирует изображение таким образом, чтобы оно заполнялосьImageButton
при сохранении пропорции.AspectFit
— почтовые ящики изображения (при необходимости), чтобы все изображение соответствовалоImageButton
пустому пробелу, добавляемого к верхней или нижней части, в зависимости от того, является ли изображение широким или высоким. Это значение перечисленияAspect
по умолчанию.
Примечание.
Класс ImageButton
также имеет Margin
и Padding
свойства, которые управляют поведением макета ImageButton
объекта. Дополнительные сведения см. в статье Поля и заполнение.
Визуальные состояния ImageButton
ImageButton
имеет значение Pressed
VisualState
, которое можно использовать для запуска визуального изменения ImageButton
при нажатии пользователем, если оно включено.
В следующем примере XAML показано, как определить визуальное состояние для Pressed
состояния:
<ImageButton Source="XamarinLogo.png"
...>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal">
<VisualState.Setters>
<Setter Property="Scale"
Value="1" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Pressed">
<VisualState.Setters>
<Setter Property="Scale"
Value="0.8" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</ImageButton>
Указывает Pressed
VisualState
, что при ImageButton
нажатии нажатия его Scale
свойство будет изменено со значения по умолчанию от 1 до 0,8. Указывает Normal
VisualState
, что при ImageButton
обычном состоянии его Scale
свойство будет иметь значение 1. Таким образом, общий эффект заключается в том, что при ImageButton
нажатии она будет немного меньше, а при ImageButton
выпуске она будет масштабирована до размера по умолчанию.
Дополнительные сведения о визуальных состояниях см. в разделе "Диспетчер визуальных состоянийXamarin.Forms".