Подтвердить что ты не робот

Как использовать акриловый акцент в Windows 10 Creators Update?

Я не могу найти подробный документ для использования акрилового акцента (CreateBackdropBrush). Я нашел пост в StackOverflow, что несколько полезно, но это не помогает начать. Поэтому, пожалуйста, создайте подробный ответ на этот пост, чтобы все могли узнать.

Update:

Microsoft выпустила официальный документ Акриловый материал

Примечание:

Если кто-то не знает об акриловом акценте. Акриловый акцент - новая функция в обновлении Windows 10 Creators, которая позволяет размытому и прозрачному фону приложения. enter image description here введите описание изображения здесь

4b9b3361

Ответ 1

ОБНОВЛЕНИЕ СОЗДАНИЯ

XAML

Вам нужно использовать компонент, который вы помещаете на фон вашего приложения, скажем, RelativePanel

<RelativePanel Grid.Column="0" Grid.ColumnSpan="2" MinWidth="40" x:Name="MainGrid" SizeChanged="Page_SizeChanged"/>
<RelativePanel Grid.Column="0" Width="{Binding ElementName=MainGrid,Path=Width}" Background="#28000000"/>
<Grid>
    <!--Having content here, for example textblock and so on-->
</Grid>

Второй RelativePanel используется для установки цвета тени над Размытием.

.cs

И затем вы можете использовать следующий код:

private void applyAcrylicAccent(Panel panel)
{
    _compositor = ElementCompositionPreview.GetElementVisual(this).Compositor;
    _hostSprite = _compositor.CreateSpriteVisual();
    _hostSprite.Size = new Vector2((float) panel.ActualWidth, (float) panel.ActualHeight);

    ElementCompositionPreview.SetElementChildVisual(panel, _hostSprite);
    _hostSprite.Brush = _compositor.CreateHostBackdropBrush();
}
Compositor _compositor;
SpriteVisual _hostSprite;

и называя его applyAcrylicAccent(MainGrid); Вам также потребуется обработать событие SizeChanged:

private void Page_SizeChanged(object sender, SizeChangedEventArgs e)
{
    if (_hostSprite != null)
        _hostSprite.Size = e.NewSize.ToVector2();
}

Конечно, вам нужно быть в обновлении для этого, CreateHostBackdropBrush() не будет работать на мобильном устройстве или в режиме планшета.

Также подумайте, что панель или сетка, которые вы установили с акриловым цветом, не смогут отобразить какой-либо элемент управления (пока я еще не тестировал). Поэтому вам нужно использовать свою относительную панель без какого-либо контроля над ней.

Прозрачная строка заголовка

Прозрачность строки заголовка может быть установлена ​​с помощью следующего кода

ApplicationViewTitleBar formattableTitleBar = ApplicationView.GetForCurrentView().TitleBar;
formattableTitleBar.ButtonBackgroundColor = Colors.Transparent;
CoreApplicationViewTitleBar coreTitleBar = CoreApplication.GetCurrentView().TitleBar;
coreTitleBar.ExtendViewIntoTitleBar = true;

Вот пример того, что генерирует приведенный выше код (с добавлением некоторых других вещей.) Пример

Обновление обновления 10.0.16190 и выше

Как упоминает Justin XL в ответ ниже, начиная с Build 16190 и выше, разработчики имеют доступ к различным акриловым кистям, расположенным по адресу Windows.UI.Xaml.Media (Acrylic API) и руководящие принципы Microsoft: Рекомендации по акриловым материалам

Ответ 2

В Creators Update Предварительный просмотр Insider 16193 (вместе с Windows 10 SDK 16190) есть новый AcrylicBrush, который можно применить непосредственно к элементу, как обычный SolidColorBrush.

<Page xmlns:media="using:Windows.UI.Xaml.Media" ...>
    <Page.Resources>
        <media:AcrylicBrush x:Key="HostBackdropBrush"
                            BackgroundSource="HostBackdrop"
                            TintColor="LightBlue"
                            TintOpacity="0.6"
                            FallbackColor="LightSkyBlue"
                            FallbackForced="False" />
    </Page.Resources>

    <Grid Background="{StaticResource HostBackdropBrush}" />
</Page>

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

Ответ 3

Примечание

Это будет работать только с Windows 10 Insider Preview (v10.0.16190.0 и выше). Если вы хотите использовать его в "Обновлениях авторов", то откройте "ответ от Sven Borden.

Вы можете присоединиться к программе предварительного просмотра Windows 10 здесь

Вы можете присоединиться к Скачать Windows 10 SDK Preview Build 16190 здесь

Акриловые тематические ресурсы

Ресурсы, названные Acrylic\WindowBrush *, представляют собой акриловый фон, в то время как Acrylic\ElementBrush * относится к in-app acrylic

Ключ ресурса Прозрачность оттенка Резервный цвет

SystemControlAcrylicWindowBrush → 80% → ChromeMedium

SystemControlAcrylicElementBrush → 80% → ChromeMedium

SystemControlAcrylicMediumHighWindowBrush → 70% → ChromeMedium

SystemControlAcrylicMediumHighElementBrush → 70% → ChromeMedium

SystemControlAcrylicMediumWindowBrush → 60% → ChromeMediumLow

SystemControlAcrylicMediumElementBrush → 60% → ChromeMediumLow

SystemControlAcrylicAccentMediumHighWindowBrush → 70% → SystemAccentColor

SystemControlAcrylicAccentMediumHighElementBrush → 70% → SystemAccentColor

SystemControlAcrylicAccentDark1WindowBrush → 80% → SystemAccentColorDark1

SystemControlAcrylicAccentDark1ElementBrush → 80% → SystemAccentColorDark1

SystemControlAcrylicAccentDark2MediumHighWindowBrush → 70% → SystemAccentColorDark2

SystemControlAcrylicAccentDark2MediumHighElementBrush → 70% → SystemAccentColorDark2

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

<Grid Background="{ThemeResource SystemControlAcrylicElementBrush}">

Пользовательская акриловая кисть

  • TintColor: слой с наложением цвета/оттенка. Рассмотрим задание как значения цвета RGB, так и непрозрачности альфа-канала.

  • TintOpacity: непрозрачность слоя оттенка. Мы рекомендуем 80% непрозрачность в качестве отправной точки, хотя разные цвета могут выглядеть более привлекательными на других прозрачных пленках.

  • BackgroundSource: флаг, чтобы указать, хотите ли вы использовать фона или в приложении acrylic.

  • FallbackColor: сплошной цвет, который заменяет акрил в режиме с низкой батареей. Для фонового акрила задний цвет также заменяет акрил, когда ваше приложение не находится в активном рабочем окне или когда приложение работает на телефоне и Xbox.

    <ResourceDictionary.ThemeDictionaries>
    <ResourceDictionary x:Key="Default">
        <AcrylicBrush x:Key="MyAcrylicBrush"
            BackgroundSource="HostBackdrop"
            TintColor="#FFFF0000"
            TintOpacity="0.8"
            FallbackColor="#FF7F0000"/>
    </ResourceDictionary>
    
    <ResourceDictionary x:Key="HighContrast">
        <SolidColorBrush x:Key="MyAcrylicBrush"
            Color="{ThemeResource SystemColorWindowColor}"/>
    </ResourceDictionary>
    
    <ResourceDictionary x:Key="Light">
        <AcrylicBrush x:Key="MyAcrylicBrush"
            BackgroundSource="HostBackdrop"
            TintColor="#FFFF0000"
            TintOpacity="0.8"
            FallbackColor="#FFFF7F7F"/>
    </ResourceDictionary>
    </ResourceDictionary.ThemeDictionaries>
    

В следующем примере показано, как объявить AcrylicBrush в коде. Если ваше приложение поддерживает несколько целей ОС, убедитесь, что этот API доступен на компьютере пользователя.

if (Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.UI.Xaml.Media.XamlCompositionBrushBase"))
{
    Windows.UI.Xaml.Media.AcrylicBrush myBrush = new Windows.UI.Xaml.Media.AcrylicBrush();
    myBrush.BackgroundSource = Windows.UI.Xaml.Media.AcrylicBackgroundSource.HostBackdrop;
    myBrush.TintColor = Color.FromArgb(255, 202, 24, 37);
    myBrush.FallbackColor = Color.FromArgb(255, 202, 24, 37);
    myBrush.TintOpacity = 0.6;

    grid.Fill = myBrush;
}
else
{
    SolidColorBrush myBrush = new SolidColorBrush(Color.FromArgb(255, 202, 24, 37));
    grid.Fill = myBrush;
}

Расширение акрила в заголовке

CoreApplication.GetCurrentView().TitleBar.ExtendViewIntoTitleBar = true;
ApplicationViewTitleBar titleBar = ApplicationView.GetForCurrentView().TitleBar;
titleBar.ButtonBackgroundColor = Colors.Transparent;
titleBar.ButtonInactiveBackgroundColor = Colors.Transparent;

Источник: Акриловый материал