来自当前项目的 WPF 动态资源

WPF Dynamic Resource from current project

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

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

问题示例:

来自旧应用程序的 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 中插入页面时,背景不再是绿色的:

<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>

Can I make sure that pages from each project will use the Dynamic Resources from their own project, instead of using the resources from the executing project?

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

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

I assumed the resources are used from the project which defines the page

这不是真的。同样,在 运行 时没有项目的概念,并且 window 与实际的 App.xaml 文件没有联系。在运行时间.

查找资源

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