我试图从一个单独的WPF窗口引用App.xaml的ResourceDictionary。我想在不同的窗口中使用资源,这似乎是推荐的方法。不幸的是,我似乎无法从另一个窗口有效地引用App.xaml。这是我的App.xaml:
<Application x:Class="View.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ViewModel="clr-namespace:ViewModel;assembly=ViewModel"
xmlns:local="clr-namespace:View"
StartupUri="ClockView.xaml">
<Application.Resources>
<ResourceDictionary>
<local:PriorityToIconConverter x:Key="PriorityToIconConverter" />
</ResourceDictionary>
</Application.Resources>
注意:我没有使用MainWindow,所以我用一个总是出现的表单替换了启动URI。我注意到,在其他一些答案中,MainWindow的位置有时是问题所在。在我的例子中,我还没有看到使用ClockView和MainWindow有什么区别。ClockView和MainWindow都存在于根命名空间中,MainWindow只是从未加载过。我也有更多的资源,但为了简洁起见,我删除了它们。
下面是一个简单的代码示例,我正在尝试从ResrouceDictionary引用App.xaml:
<local:AssistantWindow
x:Class="View.AutomatorView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:properties="clr-namespace:View.Properties"
xmlns:local="clr-namespace:View"
mc:Ignorable="d"
Title="Tool"
x:Name="Tool"
Background="Transparent"
Height="600"
Width="450"
Topmost="{Binding Source={x:Static properties:Settings.Default}, Path=ToolAlwaysOnTop}"
MinHeight="515"
MinWidth="150">
<Window.Resources>
<ResourceDictionary Source="App.xaml" />
</Window.Resources>
再一次,这被简化为简洁。当我尝试加载这个表单时,我得到了异常:
System.Windows.Markup.XamlParseException: ''Set property 'System.Windows.ResourceDictionary.Source' threw an exception.' Line number '21' and line position '10'.'
Inner Exception
IOException: Cannot locate resource 'tool/app.xaml'."Tool“的视图位于一个文件夹中,该文件夹也称为”Tool“。但是,xaml和后面的代码不引用这个名称空间,我只是使用文件夹来组织类。它看起来像是在视图所在的文件夹中寻找App.xaml。App.xaml驻留在根命名空间(视图)中。我已经尝试将xaml工具中的源代码修改为:- View.App.xaml - View:App.xaml -View:App.xaml/App.xaml
如何才能让这个引用工作,以便在整个应用程序中共享资源?谢谢。
发布于 2019-06-06 07:31:34
您不能像您正在尝试的那样加载App.xaml,因为它实际上不是ResourceDictionary。只能将ResourceDictionary文件指定为源的目标。
但是,如果您在App.xaml中声明了一个资源,您可以在任何地方引用它,而不需要加载它所在的文件。这是自动为你做的。因此,您可以在任何时候使用{StaticResource PriorityToIconConverter}引用转换器。
请注意,如果您将其从默认的启动位置(基本项目文件夹)移动,则可能必须更新其位置。右键单击项目,然后单击“属性”。导航到"Application“选项卡(应该是左侧侧边栏上最上面的元素),并查找"Startup”字段。把它设置为[ProjectName].[Namespace?].[Namespace?].App。当我测试它时,我的测试不需要手动更改位置,但是您的设置可能不一样。
https://stackoverflow.com/questions/56469304
复制相似问题