C# 为什么在AppDomain中运行表单时会丢失视觉样式?
如果我加载两个表单,一个是通过C# 为什么在AppDomain中运行表单时会丢失视觉样式?,c#,.net,winforms,C#,.net,Winforms,如果我加载两个表单,一个是通过应用程序以正常方式运行,另一个是通过AppDomain使用以下代码: static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); AppDomain dom = AppDomain.CreateDomain("
应用程序以正常方式运行,另一个是通过AppDomain使用以下代码:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
AppDomain dom = AppDomain.CreateDomain("bob", AppDomain.CurrentDomain.Evidence, AppDomain.CurrentDomain.SetupInformation);
dom.SetPrincipalPolicy(System.Security.Principal.PrincipalPolicy.WindowsPrincipal);
Test t = (Test)dom.CreateInstanceAndUnwrap(System.Reflection.Assembly.GetExecutingAssembly().FullName, typeof(Test).FullName);
t.Run();
}
使用测试中的以下代码:
public class Test : MarshalByRefObject
{
public void Run()
{
Form2 f = new Form2();
f.ShowDialog();
}
}
当显示Form2
时,我没有任何视觉样式。如果我调用newtest().Run()代码>从上面加载的表单1
中的按钮单击事件中,正确显示样式
从表单1
的按钮单击处理程序加载(不在应用程序域中):
通过AppDomain加载:
我在网上查看过,但找不到窗口中的视觉样式丢失的原因。正如您所看到的,它有一种方形的XP前的感觉
在通过AppDomain加载控件时,有人能建议如何保留视觉样式吗?请注意,这只是一个测试,今后将用于插件。应用程序。EnableVisualStyles()
适用于AppDomain。如果您从另一个AppDomain打开表单时未在其中调用EnableVisualStyles,则这些表单将不会应用视觉样式。您的代码不会重新处理此问题。发布更好的代码,提及您使用的Windows和.NET版本。否。底层操作系统调用是CreateActCtx(),用于创建激活上下文。它对AppDomains一无所知。谢谢!:)总是小事情!