Windows Universal App 8.1 自定义用户控件

Posted

技术标签:

【中文标题】Windows Universal App 8.1 自定义用户控件【英文标题】:Windows Universal App 8.1 Custom User Control 【发布时间】:2015-11-26 16:16:03 【问题描述】:

在过去的两周里,我遇到了一个无法解决的问题。相信我,我一直在互联网上寻找答案,但没有找到任何解决方案,更不用说提示了。

我目前正在开发一个 Windows 8.1 通用应用程序。我开发了一种模式锁定控件(控件 A),类似于 android 设备中已知的那个。该控件由 9 个 组成,这些点由不同控件(控件 B)的实例表示。控件 A 和控件 B 都有自己的依赖属性。其中一些具有具体值(例如 StrokeBrushThickness="2"),而另一些则具有在应用资源中定义的值(例如画笔)。

我面临的问题是 Windows Phone 项目一切正常。但是,当我在 Windows 项目中引用控件 A 时,我收到以下 XAML 错误,因为 A 的依赖项属性具有具体值:

未知错误:找不到具有给定键的资源。

如果我从控件中删除上述属性,应用程序会编译但在运行时抛出 Windows.UI.Xaml.Markup.XamlParseException

WinRT-Informationen:未能分配给属性

此外,对于我在应用程序中定义的一些资源,我收到以下 XAML 错误,例如:

<Color x:Key="ColorBackground">#F4F2F4</Color>
<SolidColorBrush x:Key="AppBackgroundBrush" Color="ThemeResource ColorBackground"/>

如果我删除控件 A 并将点控件 (B) 直接放入网格中,我可以让整个工作正常进行。但是,我希望避免这种解决方法,因为您可以将图像控件 A 封装在整个应用程序中重复需要的许多功能。

我希望我已经说清楚了。如果没有,我很乐意提供更多信息。

提前谢谢你!

【问题讨论】:

你总是使用ThemeResource吗?如果是这样,您会将您的资源放在ResourceDictionary.ThemeDictionaries 中吗? 我尝试了两种方式 - 使用 ThemeResource 以及 StaticResource。好像没什么区别。 【参考方案1】:

可能您未能正确注册依赖项属性。 检查你传递给DependencyProperty.Register方法的参数。

您可能从属性更改回调中抛出异常,您不应该这样做。

附:有时使用 Expression Blend 来编辑这些 XAML 会更容易。你会花一些时间学习,该工具不是针对程序员的;它是为设计师设计的,所以用户体验完全不同。但是,如果您花一些时间,您将不太可能遇到“找不到具有给定密钥的资源”之类的问题。

【讨论】:

我以这种方式注册了我的依赖属性:public static readonly DependencyProperty StrokeBrushProperty = DependencyProperty.Register("StrokeBrush", typeof(Brush), typeof(PatternLockControl), new PropertyMetadata(null)); 我从不在属性更改回调中抛出任何异常。

以上是关于Windows Universal App 8.1 自定义用户控件的主要内容,如果未能解决你的问题,请参考以下文章

在到达我的代码之前,应用程序在运行时崩溃 xcode6.1 Universal App Objective-C NSKeyedUnarchiver iOS 7.0 iOS 8.1

Windows Universal App 维护开放的 WebSocket

如何在 Windows Universal 10 App 中无异常地获取 StackTrace

在Windows 10 Universal App上添加Youtube嵌入视频

[原]Universal Windows问题:winapifamily问题:WINAPI_PARTITION_DESKTOP问题:WINAPI_PARTITION_APP问题:WINAPI_FAMIL

App清单引用了Windows Phone 8.1中主程序包错误中没有候选图像的图像