向 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}"
...
会起作用。
我正在制作一个以 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}"
...
会起作用。