将资源添加到WPF窗口

时间:2018-05-19 05:23:35

标签: c# wpf dll autocad-plugin

我正在制作一个以WPF窗口为界面的AutoCAD .net程序。目前,WPF界面正在AutoCAD .net应用程序中引用,我按如下方式从AutoCAD调用窗口。

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

....我引用了窗口的静态资源样式

WindowStyle="None"
    AllowsTransparency="True"
   Style="{StaticResource MainWindow}"
    >

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

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

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

2 个答案:

答案 0 :(得分:1)

我设法通过将资源添加到我在其文件后面的代码中引用的窗口来实现它。

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();
    }
}

}

我认为这允许在为窗口调用静态资源之前加载它们。

答案 1 :(得分:0)

您不能在根标记中为外部Resourcedictionaries使用Staticresource。在初始化时资源不存在。实际上,在调用InitializeComponent之前,在ctor中链接它确实一样...

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

将起作用。