我正在尝试使用以下代码在UWP平台上获取当前的UI-AccentColor:

var uiSettings = new UISettings();
var accentColor = uiSettings.GetColorValue(UIColorType.Accent);


该代码适用于v10586和v14939,但不适用于v10240,但存在以下异常:

Unable to cast object of
type 'Windows.UI.ViewManagement.UISettings' to
type 'Windows.UI.ViewManagement.IUISettings3'.


问题:尽管此方法在使用的ApiContract [Assembly Windows.Foundation.UniversalApiContract,Version = 1.0.0.0]中定义,并且所有AccentColor-EnumValues也在ApiContract v1中定义,但为什么该代码无法在v10240中使用?尽管文档没有暗示此类异常,但是避免此类错误的最佳实践是什么?

该文档指定了v10240使用的方法的可用性:UISettings::GetColorValue和使用的枚举:UIColorType

我已经找到了StackOverflow Get Variations of Accent color in UWP,但这不能解决我的问题。

展示项目位于:https://github.com/janjaali/UwpGetAccentColorVs10240

最佳答案

这看起来像合同清单中的错误,然后流入文档中。

GetColorValue包含在IUISettings3中(因此会出现铸造错误),它是11月更新(内部版本10586)的新增功能。应该是UniversalApiContract版本2.0

您应该能够检查API是否可用于ApiInformation类。这将创建带有重音颜色的画笔,或者如果不存在GetColorValue,则退回到特定于应用程序的默认值:

Brush accentBrush = (Brush) App.Current.Resources["CustomAppAccentBrush"];
if (Windows.Foundation.Metadata.ApiInformation.IsMethodPresent("Windows.UI.ViewManagement.UISettings","GetColorValue"))
{
    var UISettings = new Windows.UI.ViewManagement.UISettings();
    var accentColor = UISettings.GetColorValue(Windows.UI.ViewManagement.UIColorType.Accent);
    accentBrush = new SolidColorBrush(accentColor);
}

关于c# - UWP v10240 GetAccentColor,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43598310/

10-12 22:36