我有两个单独的 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
中定义资源更有意义。或者根本不使用资源。