【问题标题】:Adding resources to an instance of WPF window将资源添加到 WPF 窗口的实例
【发布时间】:2018-10-29 12:42:09
【问题描述】:

我正在制作一个以 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}"
    >

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

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

是否有可以用于 WPFWindow.MainWindow 实例的 C# 等效项?

【问题讨论】:

    标签: c# wpf dll autocad-plugin


    【解决方案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();
        }
    }
    

    }

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

    【讨论】:

      【解决方案2】:

      您不能在外部资源字典的根标记中使用静态资源。在初始化时,资源不存在。在调用 InitializeComponent 之前将其链接到 ctor 中(正如您所做的那样)实际上是相同的......

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

      会起作用的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多