CompositionNineGridBrush Класс

Определение

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

public ref class CompositionNineGridBrush sealed : CompositionBrush
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.Foundation.LiftedContract, 65536)]
/// [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.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.Foundation.WindowsAppSDKContract, 65536)]
class CompositionNineGridBrush final : CompositionBrush
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.Foundation.LiftedContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class CompositionNineGridBrush : CompositionBrush
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.Foundation.WindowsAppSDKContract), 65536)]
public sealed class CompositionNineGridBrush : CompositionBrush
Public NotInheritable Class CompositionNineGridBrush
Inherits CompositionBrush
Наследование
Object Platform::Object IInspectable CompositionObject CompositionBrush CompositionNineGridBrush
Атрибуты

Примеры

Применение 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 , к которому применяется преобразование с помощью одного из следующих свойств:

Применение 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

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

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

Возвращает DispatcherQueue для CompositionObject.

(Унаследовано от 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)
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)

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

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