向 WPF 实例添加资源 window

Adding resources to an instance of WPF window

我正在制作一个以 WPF window 作为界面的 AutoCAD .net 程序。当前,WPF 接口被引用到 AutoCAD .net 应用程序中,我正在从 AutoCAD 中调用 window,如下所示。

public class Class1
{
    public static WPFWindow.MainWindow mainWindow = new WPFWindow.MainWindow();

    [CommandMethod("Launch", CommandFlags.Session)]

    public void Launch()
    {
Autodesk.AutoCAD.ApplicationServices.Application.ShowModalWindow(mainWindow);

    }
}

在我开始向我正在添加的 WPF window 添加任何形式的资源之前,这工作正常。例如,以下工作直到

<Window x:Class="WPFWindow.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:WPFWindow" 
    mc:Ignorable="d"
    Title="Test" Height="450" Width="800"
    WindowStyle="None"
    AllowsTransparency="True"
    >
<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>

            <ResourceDictionary Source="Themes/Styles.xaml"/>

        </ResourceDictionary.MergedDictionaries>

    </ResourceDictionary>

</Window.Resources>

<Grid>
    <Button Content="Press Me"/>

</Grid>

.....我为 window

引用了静态资源样式
WindowStyle="None"
    AllowsTransparency="True"
   Style="{StaticResource MainWindow}"
    >

使用静态资源当我在AutoCAD中运行"Launch"命令程序找不到静态资源。我不确定如何获取 WPFWindow 的实例以使用 C# 代码查找资源。作为测试,我添加了 WPFWindow 作为对 WPF 应用程序的引用,并设法让它找到使用 Pack URI

的资源
    <ResourceDictionary Source="pack://application:,,,/WPFWindow;component/Themes/Styles.xaml"/>

是否有我可以用于 WPFWindow.MainWindow 实例的 C# 等价物?

我设法通过将资源添加到我在其代码隐藏文件中引用的 window 使其工作。

namespace WPFWindow
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        this.Resources.Source = new Uri(@"pack://application:,,,/WPFWindow;component/Themes/Styles.xaml"", UriKind.Absolute);
        InitializeComponent();
    }
}

}

我认为这允许在为 window 调用静态资源之前加载静态资源。

您不能在外部 Resourcedictionaries 的根标记中使用 Staticresource。在初始化时资源不存在。在调用 InitializeComponent 之前在 ctor 中链接它(就像您所做的那样)实际上是一样的...

...
WindowStyle="None"
AllowsTransparency="True"
Style="{DynamicResource MainWindow}"
...

会起作用。