如何使用refrenced类库中的控件使用自己的style.xaml文件

时间:2018-01-18 16:16:54

标签: uwp user-controls styles

所以我构建了一个类库(通用窗口),以便在尽可能多的应用程序中重用我的所有控件。

我已经编写了所有控件,现在我想使用它们,但是当我在实际应用程序中使用这些控件时,Designer会中断,我无法构建应用程序。

这是错误消息: Error message in german

这意味着无法找到我的样式文件。

所以我的解决方案结构如下:

Solution structure

样式控件中使用的样式如下:

<UserControl.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary  Source="/Styles/SampleStyle.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </UserControl.Resources>

这完全有效,但当我在主页中使用控件时,就像这样

<Page
    x:Class="SandBoxSampleApp.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:SandBoxSampleApp"
    xmlns:SampleControls="pack://application:,,,/SandBoxClassLibrary:component/Controls"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    xmlns:UsingSampleControls="using:SandBoxClassLibrary.Controls"
    >
    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <UsingSampleControls:SampleUserControl/>
    </Grid>
</Page>

设计师休息等等所以我读了很多文章,但似乎我没有得到它。即使我在互联网上看到我必须访问这样的控件,InteliSense也设法识别控件等等

xmlns:SampleControls="pack://application:,,,/SandBoxClassLibrary:component/Controls"

这是我的示例项目: SampleProject

1 个答案:

答案 0 :(得分:1)

作为文件UserControl usage scope

  

UserControl元素具有资源查找行为的特殊情况,因为它具有定义范围和使用范围的固有概念。从其定义范围生成XAML资源引用的UserControl必须能够支持在其自己的定义范围查找序列中查找该资源 - 也就是说,它无法访问应用程序资源。从UserControl使用范围,资源引用被视为在查找序列中朝向其使用页面根目录(就像从加载的对象树中的对象做出的任何其他资源引用一样)并且可以访问应用程序资源。

所以你应该将 SampleStyle.xaml 放在UserControl的相同根位置,也就是说 SampleStyle.xaml 文件应放入控制文件夹。