CompositionNineGridBrush Класс

Определение

Закрашивает Объект SpriteVisual с помощью CompositionBrush после применения Nine-Grid Растяжение к содержимому исходной кисти. Источник растяжения девяти сеток может быть любым CompositionBrush типа CompositionColorBrush, CompositionSurfaceBrush или CompositionEffectBrush.

public ref class CompositionNineGridBrush sealed : CompositionBrush
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 196608)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class CompositionNineGridBrush final : CompositionBrush
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 196608)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class CompositionNineGridBrush : CompositionBrush
Public NotInheritable Class CompositionNineGridBrush
Inherits CompositionBrush
Наследование
Object Platform::Object IInspectable CompositionObject CompositionBrush CompositionNineGridBrush
Атрибуты

Требования к Windows

Семейство устройств
Windows 10 Anniversary Edition (появилось в 10.0.14393.0)
API contract
Windows.Foundation.UniversalApiContract (появилось в v3.0)

Примеры

Применение растяжения Nine-Grid к ресурсу кнопки (источникCompositionSurfaceBrush)

private SpriteVisual CreateNineGridVisualFromImageSurface(ICompositionSurface imgSurface)
{
  CompositionSurfaceBrush sourceBrush = _compositor.CreateSurfaceBrush(imgSurface);

  // imgSurface is 50x50 pixels; nine-grid insets, as measured in the asset, are:
  // left = 1, top = 5, right = 10, bottom = 20 (in pixels)

  // create NineGridBrush to paint onto SpriteVisual
  CompositionNineGridBrush ninegridBrush = _compositor.CreateNineGridBrush();

  // set SurfaceBrush as Source to NineGridBrush
  ninegridBrush.Source = sourceBrush;

  // set Nine-Grid Insets
  ninegridBrush.SetInsets(1, 5, 10, 20);

  // set appropriate Stretch on SurfaceBrush for Center of Nine-Grid
  sourceBrush.Stretch = CompositionStretch.Fill;

  // create SpriteVisual and paint w/ NineGridBrush
  SpriteVisual visual = _compositor.CreateSpriteVisual();
  visual.Size = new Vector2(100, 75);
  visual.Brush = ninegridBrush;

  return visual;
}

Создание сплошной цветной границы (источникCompositionColorBrush)

private SpriteVisual CreateBorderVisual(SpriteVisual childContent, float borderThickness, Color borderColor)
{
  SpriteVisual borderVisual = _compositor.CreateSpriteVisual();
  borderVisual.Size = childContent.Size + new Vector2(2 * borderThickness);

  // create NineGridBrush w/ ColorBrush Source
  CompositionNineGridBrush ninegridBrush = _compositor.CreateNineGridBrush();
  ninegridBrush.Source = _compositor.CreateColorBrush(borderColor);
  ninegridBrush.SetInsets(borderThickness);

  // opt out of drawing Center of Nine-Grid
  ninegridBrush.IsCenterHollow = true;

  // paint SpriteVisual w/ NineGridBrush
  borderVisual.Brush = ninegridBrush;

  // set child visual appropriately; manage size/scale changed events separately
  childContent.Offset = new Vector3(borderThickness, borderThickness, 0);
  borderVisual.Children.InsertAtTop(childContent);

  return borderVisual;
}

Использование ExpressionAnimation для динамического обновления масштабов наборов

private void CounterScaleInsets(SpriteVisual ninegridVisual)
{
  CompositionNineGridBrush ninegridBrush = (CompositionNineGridBrush)ninegridVisual.Brush;

  // use expressions to counter a scale transformation on visual so as to maintain a constant inset thickness
  ExpressionAnimation counterScaleXAnimation = _compositor.CreateExpressionAnimation("1/visual.Scale.X");
  counterScaleXAnimation.SetReferenceParameter("visual", ninegridVisual);

  ExpressionAnimation counterScaleYAnimation = _compositor.CreateExpressionAnimation("1/visual.Scale.Y"); 
  counterScaleYAnimation.SetReferenceParameter("visual", ninegridVisual);

  // start ExpressionAnimation on Nine-Grid InsetScales
  ninegridBrush.StartAnimation("LeftInsetScale", counterScaleXAnimation);
  ninegridBrush.StartAnimation("RightInsetScale", counterScaleXAnimation);

  ninegridBrush.StartAnimation("TopInsetScale", counterScaleYAnimation);
  ninegridBrush.StartAnimation("BottomInsetScale", counterScaleYAnimation);
}

Применение эффекта к Nine-Grid растянутого содержимого (CompositionNineGridBrush в качестве входных данных для CompositionEffectBrush)

private void DesaturateNineGridVisual(SpriteVisual ninegridVisual)
{
  // get the NineGridBrush that the SpriteVisual is painted with
  CompositionNineGridBrush ninegridBrush = (CompositionNineGridBrush)ninegridVisual.Brush;

  // get or define IGraphicsEffect
  var saturationEffect = new SaturationEffect
  {
    Saturation = 0f,
    Source = new CompositionEffectSourceParameter("source"),
  };

  // create EffectBrush from EffectFactory
  CompositionEffectFactory saturationFactory = _compositor.CreateEffectFactory(saturationEffect);
  CompositionEffectBrush saturationBrush = saturationFactory.CreateBrush();

  // input NineGridBrush to EffectBrush
  saturationBrush.SetSourceParameter("source", ninegridBrush);

  // paint SpriteVisual with EffectBrush (w/ NineGridBrush as source parameter)
  ninegridVisual.Brush = saturationBrush;
}

Применение Nine-Grid растяжение к маске непрозрачности (CompositionNineGridBrush в качестве входных данных для CompositionMaskBrush)

private SpriteVisual CreateMaskedRoundedRectVisual(ICompositionSurface myRoundedRectMaskSurface)
{
  // ColorBrush to be set as MaskBrush.Source
  CompositionColorBrush colorBrush = _compositor.CreateColorBrush(Colors.Blue);

  // SurfaceBrush w/ opacity mask surface
  CompositionSurfaceBrush roundedRectBrush = _compositor.CreateSurfaceBrush(myRoundedRectMaskSurface);
  roundedRectBrush.Stretch = CompositionStretch.Fill; // stretch for center of nine-grid

  // NineGridBrush w/ insets on opacity mask surface
  CompositionNineGridBrush ninegridBrush = _compositor.CreateNineGridBrush();
  ninegridBrush.Source = roundedRectBrush;
  ninegridBrush.SetInsets(_cornerRadius); // the radius, in pixels, of the corner as specified on my opacity mask surface 

  // Create MaskBrush
  CompositionMaskBrush maskBrush = _compositor.CreateMaskBrush();
  maskBrush.Source = colorBrush;
  maskBrush.Mask = ninegridBrush;

  // Paint SpriteVisual with MaskBrush
  SpriteVisual sprite = _compositor.CreateSpriteVisual();
  sprite.Size = new Vector2(300, 200);
  sprite.Brush = maskBrush;
  return sprite;
}

Комментарии

Nine-Grid растяжение означает секционирование визуального содержимого (содержимого исходной кисти, нарисованной на SpriteVisual) в сетку из девяти прямоугольников таким образом, чтобы размеры угловых прямоугольников сохранялись при изменении размера, как показано на схеме ниже.

Растяжение девяти разделов сетки

При изменении или масштабировании объекта SpriteVisual , окрашенного с помощью CompositionNineGridBrush, левое и правое поля (прямоугольники 4 и 6) тянутся вдоль вертикальной оси, верхнее и нижнее поля прямоугольники (прямоугольники 2 и 8) тянутся вдоль горизонтальной оси, а центр (прямоугольник 5) растягивается вдоль обеих осей, в то время как углы (прямоугольники 1, 3, 7 и 9) не растягиваются.

Свойство Source объекта CompositionNineGridBrush принимает кисти одного из двух типов:

  • CompositionSurfaceBrush: применение Nine-Grid растяжение к поверхности текстурированного изображения.
  • CompositionColorBrush: создание сплошных цветовых границ.

Примечания об источнике CompositionSurfaceBrush

Наборы задаются в виде значений пикселей, измеряемых в пространстве координат объекта ICompositionSurface , связанного с CompositionSurfaceBrush. Связь между вставкой, указанной в пространстве координат поверхности, и вставкой, отображаемой при нарисовке на SpriteVisual , выглядит следующим образом:

Inset_Surface*InsetScale=Inset_SpriteVisual

The CompositionSurfaceBrush. Свойство Stretch указывает, как растягивается содержимое центра Nine-Grid.

Растяжение центра сетки из девяти

Наборы NineGridBrush, указанные в ресурсе скругленным прямоугольником с помощью CompositionStretch.Fill; Наборы задаются в пикселях (измеряется в пространстве координат объекта ICompositionSurface, содержащего ресурс).

CompositionNineGridBrush не предназначен для применения масштабирования Nine-Grid к источнику CompositionSurfaceBrush с преобразованием, примененным с помощью одного из следующих свойств:

  • CompositionSurfaceBrush.AnchorPoint
  • CompositionSurfaceBrush.CenterPoint
  • CompositionSurfaceBrush.Offset
  • CompositionSurfaceBrush.RotationAngle
  • CompositionSurfaceBrush.RotationAngleInDegrees
  • CompositionSurfaceBrush.Scale
  • CompositionSurfaceBrush.TransformMatrix Пиксельное содержимое не будет отрисовано, если к источнику CompositionSurfaceBrush применяется операция преобразования CompositionNineGridBrush.

Применение Nine-Grid растяжения к маске непрозрачности

Содержимое источника CompositionSurfaceBrush также может быть поверхностью маски непрозрачности. Результирующий объект CompositionNineGridBrush может быть задан как Mask для CompositionMaskBrush. Это позволит маскируемой содержимой масштабироваться по мере необходимости, в то время как маска непрозрачности подвергается Nine-Grid растяжения.

Аналогичным образом источникдля CompositionMaskBrush также может иметь тип CompositionNineGridBrush.

Применение эффекта к CompositionNineGridBrush

CompositionNineGridBrush можно задать в качестве источника для CompositionEffectBrush , чтобы применить IGraphics или Windows.UI.Composition.Effect к его Nine-Grid растянутого содержимого.

Примечания об источнике CompositionColorBrush

В сочетании со свойством IsCenterHollowисточникCompositionColorBrush позволяет создавать сплошные цветовые границы. Обратите внимание, что вставки для источникаCompositionColorBrush измеряются в пространстве координат самого SpriteVisual.

Примечания по толщине и масштабу набора

Толщина вставки compositionNineGridBrush не изменяется при изменении свойства Size связанного объекта SpriteVisual .

Свойства масштабирования набора предоставляют механизм для масштабирования Nine-Grid наборов из пространства координат кисти (например, пиксельного пространства для изображения) в пространство SpriteVisual. Например, свойства шкалы в наборе можно использовать для управления толщиной вставки в ответ на преобразование масштаба, унаследованное от spriteVisual , на котором закрашивается NineGridBrush, или произвольного предка в его визуальном дереве (например, в случае масштабирования DPI и т. д.). В этом случае expressionAnimationпредоставляет средства для динамического обновления значений шкалы вставки.

Свойства

BottomInset

Вставка от нижнего края исходного содержимого, указывающего толщину нижней строки. Значение по умолчанию — 0,0f.

BottomInsetScale

Масштабирование, применяемое к BottomInset. Значение по умолчанию — 1.0f.

Comment

Строка, связанная с CompositionObject.

(Унаследовано от CompositionObject)
Compositor

Compositor, используемый для создания объекта CompositionObject.

(Унаследовано от CompositionObject)
Dispatcher

Диспетчер для CompositionObject.

(Унаследовано от CompositionObject)
DispatcherQueue

Возвращает dispatcherQueue для Объекта CompostionObject.

(Унаследовано от CompositionObject)
ImplicitAnimations

Коллекция неявных анимаций, присоединенных к этому объекту.

(Унаследовано от CompositionObject)
IsCenterHollow

Указывает, рисуется ли центр Nine-Grid.

LeftInset

Вставка от левого края исходного содержимого, указывающего толщину левого столбца. Значение по умолчанию — 0,0f.

LeftInsetScale

Масштабирование, применяемое к LeftInset. Значение по умолчанию — 1.0f.

Properties

Коллекция свойств, связанных с CompositionObject.

(Унаследовано от CompositionObject)
RightInset

Вставка от правого края исходного содержимого, указывающего толщину правого столбца. Значение по умолчанию — 0,0f.

RightInsetScale

Масштабирование, применяемое к RightInset. Значение по умолчанию — 1.0f.

Source

Кисть, содержимое которой должно быть Nine-Grid растянуто. Может иметь тип CompositionSurfaceBrush или CompositionColorBrush.

TopInset

Вставка от верхнего края исходного содержимого, указывающего толщину верхней строки. Значение по умолчанию — 0,0f.

TopInsetScale

Масштабирование, применяемое к TopInset. Значение по умолчанию — 1.0f.

Методы

Close()

Закрывает CompositionObject и освобождает системные ресурсы.

(Унаследовано от CompositionObject)
ConnectAnimation(String, CompositionAnimation)

Подключается и анимация.

(Унаследовано от CompositionObject)
DisconnectAnimation(String)

Отключает анимацию.

(Унаследовано от CompositionObject)
Dispose()

Выполняет определяемые приложением задачи, связанные с удалением, высвобождением или сбросом неуправляемых ресурсов.

(Унаследовано от CompositionObject)
PopulatePropertyInfo(String, AnimationPropertyInfo)

Определяет свойство, которое можно анимировать.

(Унаследовано от CompositionObject)
SetInsets(Single)

Задает наборы CompositionNineGridBrush, используя одно и то же значение для верхнего, нижнего, левого и правого. Значение по умолчанию — 0,0f.

SetInsets(Single, Single, Single, Single)

Задает наборы CompositionNineGridBrush, используя указанные значения для верхнего, нижнего, левого и правого. Значение по умолчанию — 0,0f.

SetInsetScales(Single)

Задает (одинаковый) масштаб, применяемый к левым, верхним, правым и нижним вставкам. Значение по умолчанию — 1.0f.

SetInsetScales(Single, Single, Single, Single)

Задает масштаб, применяемый к левым, верхним, правым и нижним вставкам соответственно. Значение по умолчанию — 1.0f.

StartAnimation(String, CompositionAnimation)

Соединяет анимацию с указанным свойством объекта и запускает анимацию.

(Унаследовано от CompositionObject)
StartAnimation(String, CompositionAnimation, AnimationController)

Соединяет анимацию с указанным свойством объекта и запускает анимацию.

(Унаследовано от CompositionObject)
StartAnimationGroup(ICompositionAnimationBase)

Запускает группу анимации.

Метод StartAnimationGroup в CompositionObject позволяет запустить CompositionAnimationGroup. Все анимации в группе будут запущены одновременно с объектом .

(Унаследовано от CompositionObject)
StopAnimation(String)

Отключает анимацию от указанного свойства и останавливает анимацию.

(Унаследовано от CompositionObject)
StopAnimationGroup(ICompositionAnimationBase)

Останавливает группу анимации.

(Унаследовано от CompositionObject)
TryGetAnimationController(String)

Возвращает AnimationController для анимации, выполняемой в указанном свойстве.

(Унаследовано от CompositionObject)

Применяется к

См. также раздел