Поделиться через


Общие сведения об эффектах

Эффекты позволяют настраивать собственные элементы управления на каждой платформе. Они обычно используются для незначительных изменений в стиле. В этой статье приводятся общие сведения об эффектах, описывается граница между эффектами и пользовательскими отрисовщиками и рассказывается о классе PlatformEffect.

Xamarin.FormsСтраницы, макеты и элементы управления представляют собой общий API для описания кроссплатформенных мобильных пользовательских интерфейсов. Каждая страница, макет и элемент управления отрисовываются по-разному на разных платформах с помощью класса Renderer, который создает собственный элемент управления (соответствующий представлению Xamarin.Forms), размещает его на экране и реализует поведение, определенное в общем коде.

Разработчики могут реализовывать пользовательские классы Renderer для настройки внешнего вида или работы элемента управления. Однако реализация класса настраиваемого отрисовщика для выполнения простой настройки элемента управления чаще всего является довольно трудоемкой. Эффекты упрощают этот процесс, позволяя настраивать собственные элементы управления на каждой платформе.

Эффекты создаются в проектах для конкретных платформ путем создания подклассов элемента управления PlatformEffect, а затем используются путем их присоединения к соответствующему элементу управления в библиотеке .NET Standard Xamarin.Forms или проекте общей библиотеки.

Когда следует предпочесть эффект настраиваемому отрисовщику?

Эффекты упрощают настройку элемента управления, могут использоваться повторно и в этих целях параметризироваться.

Любого результата, который можно получить с помощью эффекта, можно также достичь с помощью настраиваемого отрисовщика. Однако настраиваемые отрисовщики более гибкие и дают больше возможностей настройки, чем эффекты. Ниже представлены обстоятельства, в которых эффект следует предпочесть настраиваемому отрисовщику.

  • Использовать эффект рекомендуется, если для достижения нужного результата достаточно изменить свойства зависящего от платформы элемента управления.
  • Настраиваемый отрисовщик требуется, если необходимо переопределить методы зависящего от платформы элемента управления.
  • Настраиваемый отрисовщик требуется, если необходимо заменить зависящий от платформы элемент управления, реализующий элемент управления Xamarin.Forms.

Создание подкласса класса PlatformEffect

В приведенной ниже таблице перечислены пространства имен для класса PlatformEffect на каждой платформе и типы его свойств.

Платформа Пространство имен Контейнер Элемент управления
iOS Xamarin.Forms.Platform.iOS UIView UIView
Android Xamarin.Forms.Platform.Android ViewGroup Представления
Универсальная платформа Windows (UWP) Xamarin.Forms.Platform.UWP FrameworkElement FrameworkElement

Каждый зависящий от платформы класс PlatformEffect предоставляет следующие свойства:

  • Container — ссылается на зависящий от платформы элемент управления, используемый для реализации макета;
  • Control — ссылается на зависящий от платформы элемент управления, используемый для реализации элемента управления Xamarin.Forms;
  • Element — ссылается на отрисовываемый элемент управления Xamarin.Forms.

Для эффектов не определены сведения о типе контейнера, элемента управления или элемента, к которому они присоединяются, так как их можно присоединять к любым элементам. Поэтому, когда эффект присоединяется к элементу, который он не поддерживает, его функциональность должна соответствующим образом ограничиваться либо должно вызываться исключение. Однако свойства Container, Control и Element можно привести к реализующему типу. Дополнительные сведения об этих типах см.в статье Базовые классы и собственные элементы управления отрисовщика.

Каждый зависящий от платформы класс PlatformEffect предоставляет указанные ниже методы, которые необходимо переопределить для реализации эффекта.

  • OnAttached — вызывается, когда эффект присоединяется к элементу управления Xamarin.Forms. В каждом классе эффекта для конкретной платформы можно использовать переопределенную версию этого метода, во-первых, для настройки элемента управления, во-вторых, для обработки исключений, когда указанный элемент управления Xamarin.Forms не поддерживает тот или иной эффект.
  • OnDetached — вызывается, когда эффект отсоединяется от элемента управления Xamarin.Forms. В переопределенной версии этого метода в каждом зависящем от платформы классе эффекта выполняется очистка эффекта, например отмена регистрации обработчика событий.

Кроме того, класс PlatformEffect предоставляет метод OnElementPropertyChanged, который также можно переопределить. Он вызывается при изменении свойства элемента. Переопределенная версия этого метода в каждом зависящем от платформы классе эффекта реагирует на изменения привязываемого свойства в элементе управления Xamarin.Forms. Следует всегда проверять наличие измененного свойства, так как это переопределение может вызываться многократно.