1

我正在创建一个 XamarinFroms 解决方案,并且我想在我的 UWP 应用程序中实现 Fluent Design 或部分它。您可能知道,大多数 Fluent Design 构建块都是 ThemeResources。所以我试着做:

if (Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.UI.Xaml.Media.AcrylicBrush"))
            {
                var brush = Windows.UI.Xaml.Application.Current.Resources["SystemControlAltHighAcrylicWindowBrush"] as AcrylicBrush;
                var tint = brush.TintColor;
                var opacity = brush.TintOpacity;
                var fallbackColor = brush.FallbackColor;
                var source = brush.BackgroundSource;
            }

但我得到了一个意外

System.Exception: 'Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))' on the brush creating line of code. 

如果我无法在我的 UWP 项目的代码中检索这些主题资源,我将无法访问任何预定义的画笔,或者我永远无法实现显示样式

4

1 回答 1

0

对于 UWP fluent 设计,它仅在 UWP 中可用,您无法直接在 xamarin Forms 中实现它。目前 Xamarin Forms 还没有提供这样的接口。=因为它是针对 UWP 的特定设计。并且很难抽象出适用于每个平台的统一接口。所以更好的方法是单独使用自定义渲染器来实现。例如,在您的情况下,要SystemControlAltHighAcrylicWindowBrush在 Xamarin.UWP 中工作,您可以自定义LayoutRenderer. 而下面的段代码实现AcrylicWindowBrushStackLayout.

[assembly: ExportRenderer(typeof(StackLayout), typeof(ICustomStackLayoutRenderer))]

namespace CustomStackLayoutRenderer.UWP
{
    public class ICustomStackLayoutRenderer : LayoutRenderer
    {

        protected override void OnElementChanged(ElementChangedEventArgs<Layout> e)
        {
            base.OnElementChanged(e);

        }
        protected override void UpdateBackgroundColor()
        {
            base.UpdateBackgroundColor();
            if (Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.UI.Xaml.Media.AcrylicBrush"))
            {
                var brush = Windows.UI.Xaml.Application.Current.Resources["SystemControlAltHighAcrylicWindowBrush"] as AcrylicBrush;
                var tint = brush.TintColor;
                var opacity = brush.TintOpacity;
                var fallbackColor = brush.FallbackColor;
                var source = brush.BackgroundSource;
                this.Background = brush;
            }

        }
    }
}

在此处输入图像描述

于 2018-08-08T03:35:15.987 回答