Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在WPF应用程序中正确引用外部xaml样式?_Wpf_Visual Studio_Xaml - Fatal编程技术网

如何在WPF应用程序中正确引用外部xaml样式?

如何在WPF应用程序中正确引用外部xaml样式?,wpf,visual-studio,xaml,Wpf,Visual Studio,Xaml,我相信我的问题相当简单,但我很难成功地实现它。我只是希望提取WPF应用程序中元素的样式,因为xaml非常拥挤,而且xaml经常重复 因此,我希望将样式以资源字典的形式放在外部xaml文件中,然后在代码的参考资料部分引用该文件 我有以下.xaml文件: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.

我相信我的问题相当简单,但我很难成功地实现它。我只是希望提取WPF应用程序中元素的样式,因为xaml非常拥挤,而且xaml经常重复

因此,我希望将样式以资源字典的形式放在外部xaml文件中,然后在代码的参考资料部分引用该文件

我有以下.xaml文件:

<ResourceDictionary 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="PTextBox" TargetType="TextBox" x:Name="PTextBox">
    <Setter Property="Foreground" Value="#FFA1C8E7"/>
    <Setter Property="BorderBrush" Value="#FFA1C8E7"/>
</Style>
如果我使资源成为动态的,那么这些样式就不会在运行时应用

我不确定xaml文件在运行时之前是否需要某些属性,但我的如下所示:

如果有人能回答这个谜,那就太好了。我在谷歌上搜索到手指流血,但其他人发布的答案都没有解决我的问题,这似乎很基本


编辑:已解决。按照Andrew Stephens的建议,将构建操作切换到页面而不是资源已经解决了我的问题。这被另一个潜在的问题所隐藏,那就是我在我的资源中添加了一个布尔到可见性转换器(公共工具)。仅此一项就可以了,但一旦我声明了一个资源字典,这个转换器也需要放在字典中。

在开始引用xaml中的外部样式之前,请尝试使用新合并的字典构建解决方案

这似乎有悖常理,但VisualStudio可能知道另一个xaml文件中的某个类型,而设计师却不知道这可能会导致这样的错误


Koda

这听起来像是某个地方的XAML语法错误,但也可能是由于主窗口代码隐藏中的未处理异常(如果这里有任何代码)引起的。有几种方法可以调试这个神秘的异常(阅读注释了解更多提示)


此外,您的.xaml资源文件的生成操作应为“页面”而不是“资源”。

您的.xaml资源文件的生成操作应为“页面”而不是“资源”。感谢您的回复。我已经将构建操作更新为“Page”,但是仍然会发生解析错误。这听起来像是某个地方的XAML语法错误,但也可能是由主窗口代码中未处理的异常(如果您在这里有任何代码)引起的。有几种方法可以调试这个神秘的异常:(阅读评论获得更多提示)谢谢你给我指出这个网站,因为我相信它在将来会派上用场。不幸的是(我想)代码中没有错误。它成功初始化,然后当我正在开发的工具窗口开始打开时,会抛出xaml错误。谢谢你,安德鲁,看来你的解决方案解决了我的问题,只是隐藏在更多问题后面。请添加您的评论作为完整答案,我会将其标记为首选答案。我不确定我是否理解。我已经删除了ui元素本身对样式的引用,但保留了资源字典引用。它现在可以成功地构建和运行,但当然没有样式。但是,一旦我添加样式引用并再次运行它,它就会失败。这表明外部文件中存在xaml错误,但它看起来是完美的。
<UserControl.Resources>
    <ResourceDictionary x:Key="PegasusStyles">
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="../../Resources/Styles/PegasusStyles.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>
<TextBox Style="{StaticResource PTextBox}"/>
An unhandled exception of type 'System.Windows.Markup.XamlParseException' occurred in PresentationFramework.dll