当前项目中的 WPF 动态资源



我有两个单独的 WPF 项目,每个项目都有自己定义的动态资源,这些动态资源主要定义每个应用程序中的颜色。手头的任务是将每个项目的主页包含在新项目中。到目前为止,这两个项目都包括在内,但动态资源是从新项目中使用的。

我是否可以确保每个项目中的页面将使用其自己项目中的动态资源,而不是使用正在执行的项目的资源?

问题示例:

旧应用程序中的 GreenPage.xaml 和 application.xaml:

<Page x:Class="GreenPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:local="clr-namespace:Test"
mc:Ignorable="d" 
d:DesignHeight="450" d:DesignWidth="800"
Title="GreenPage">
<Grid Background="{DynamicResource DefinedColor}">
</Grid>
</Page>
<Application x:Class="Application"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Test"
StartupUri="MainWindow.xaml">
<Application.Resources>
<SolidColorBrush x:Key="DefinedColor" Color="Green"/>
</Application.Resources>
</Application>

当我在设计器中期望GreenPage时,它是绿色的,但是,当在另一个项目的窗口中插入页面时,背景不再是绿色的:

<Window x:Class="MainWindow"
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:local="clr-namespace:NewProject"
xmlns:test="clr-namespace:Test;assembly=Test"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<test:GreenPage/>
</Window>

我能否确保每个项目中的页面将使用其自己项目中的动态资源,而不是使用正在执行的项目的资源?

如果在App.xaml中定义资源,则不会。运行时没有"项目"的概念。只有可执行应用程序正在运行,应用的资源取决于此特定应用程序中运行时范围内的资源。

因此,如果直接在应用 A 的App.xaml文件中定义Brush资源,则在运行任何其他应用程序时,此资源将永远不会在范围内或应用。

我假设资源是从定义页面的项目中使用的

这不是真的。同样,运行时没有项目的概念,窗口与实际的App.xaml文件没有连接。在运行时查找资源。

如果您希望项目 A 中的Page始终具有特定的颜色,则直接在Page类中定义资源比在App.xaml中定义资源更有意义。或者根本不使用资源。

最新更新