Я делаю программу AutoCAD .net с окном WPF в качестве интерфейса. В настоящее время интерфейс 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, программе не удается найти статический ресурс. Я не знаю, как получить экземпляр WPFWindow для поиска ресурса с помощью кода C#. В качестве теста я добавил WPFWindow в качестве ссылки на приложение WPF, и мне удалось заставить его найти ресурс с помощью URI пакета.
<ResourceDictionary Source = "pack://application:,,,/WPFWindow;component/Themes/Styles.xaml"/>
Есть ли эквивалент C# того, что я могу использовать для экземпляра WPFWindow.MainWindow?





Мне удалось заставить его работать, добавив ресурсы в окно, на которое я ссылался в его коде за файлами.
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();
}
}
}
Я думаю, что это позволило загрузить статические ресурсы до того, как они были вызваны для окна.
Вы не можете использовать Staticresource в корневом теге для внешних ресурсных словарей. Во время инициализации ресурса нет. Связывание его в ctor перед вызовом InitializeComponent (как и вы) на самом деле делает то же самое ...
...
WindowStyle = "None"
AllowsTransparency = "True"
Style = "{DynamicResource MainWindow}"
...
будет работать.