应用场合:如果您的WPF应用程序设置WPF运行一个实例代码后,App.xaml文件中对样式资源字典文件的引用将失效.
解决办法1:在App.xaml.cs文件中用反射动态调用另外一个DLL项目中的样式文件即可
解决办法2:在每个窗体的xaml文件中添加对指定样式文件的引用(本文不做介绍)
详细操作介绍如下:
1、WPF设置只运行一个实例代码:
App.xaml文件代码如下:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ButtonStyle.xaml"/>
</ResourceDictionary>
</Application.Resources>
</Application>
App.xaml.cs文件代码如下:
//添加引用
using System.Diagnostics;
using System.IO;
using System.Reflection;
namespace WpfUI
{
/// <summary>
/// App.xaml 的交互逻辑
/// </summary>
public partial class App : Application
{
public App()
{
}
/// <summary>
/// 要设置App.xaml的文件属性中生成操作=无
/// </summary>
[STAThread]
public static void Main()
{
App myApp = new App();
myApp.ShutdownMode = ShutdownMode.OnExplicitShutdown;
myApp.Run();
}
private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
if (e.Exception is InvalidOperationException)
e.Handled = true;
}
protected override void OnStartup(StartupEventArgs e)
{
//获取当前运行WPF程序的进程实例
Process process = Process.GetCurrentProcess();
//遍历WPF程序的同名进程组
foreach (Process p in Process.GetProcessesByName(process.ProcessName))
{
if (p.Id != process.Id && (p.StartTime - process.StartTime).TotalMilliseconds <= 0)
{
p.Kill();//关闭进程
return;
}
}
base.OnStartup(e);
//启动登陆窗体,
TestWindow myWindow = new TestWindow();
myWindow.Show();
}
}
}
2、ButtonStyle.xaml样式文件内容如下:
<ResourceDictionary
xmlns=" http://schemas.microsoft.com/winfx/2006/xaml/presentation "
xmlns:x=" http://schemas.microsoft.com/winfx/2006/xaml "
xmlns:ed=" http://schemas.microsoft.com/expression/2010/drawing ">
<!--按钮样式-->
<Style x:Key="RedButtonStyle" TargetType="{x:Type Button}">
<Setter Property="Foreground" Value="Red"/>
<Setter Property="Background" Value="Silver"/>
<Setter Property="Height" Value="23"/>
</Style>
</ResourceDictionary>
3、TestWindow.xaml文件内容如下:
<Grid>
<Button x:Name="MyButton" Content="测试按钮" Style="{StaticResource RedButtonStyle}" Margin="144.988,8,0,0" HorizontalAlignment="Left" Width="57" FontSize="16" VerticalAlignment="Top" Height="24.687"/>
</Grid>
4、运行程序后发现按钮样式RedButtonStyle总提示找不到
5、 解决办法如下:
第一步: 新建一个Windows--类库项目WpfThems,将ButtonStyle.xaml拷贝过去,生成WpfThems.dll文件
第二步:在当前项目WpfUI中添加WpfThems项目引用
第三步:修改App.xaml.cs 文件代码:
添加一个函数
private void LoadStyleResource()
{
Assembly assembly = Assembly.LoadFrom("WpfThems.dll");
string packUri = @"/WpfThems;component/ButtonStyle.xaml");
ResourceDictionary myResourceDictionary = Application.LoadComponent(new Uri(packUri, UriKind.Relative)) as ResourceDictionary;
this.Resources.MergedDictionaries.Add(myResourceDictionary);
}
在OnStartup函数中添加上面样式加载函数的调用即可
protected override void OnStartup(StartupEventArgs e)
{
LoadAllStyleResource():
//后面的代码省略,请参考上面代码
}
分享到:
相关推荐
本文将深入探讨如何在WPF后台动态调用样式文件,以实现这一功能。 首先,我们需要理解WPF中的样式和资源。样式(Style)定义了一个UI元素的默认外观属性,如颜色、字体等,而模板(Template)则可以自定义元素的...
在Windows Presentation Foundation(WPF)框架中,动态调用资源文件是一种常见的技术,它使得开发者能够在运行时根据需求加载和应用不同的资源。标题中的“WPF动态调用资源文件”特指在WPF应用程序中,如何根据用户...
本示例重点介绍了如何在后台动态地绑定ListView的数据源,以及如何通过代码添加行和列。这将帮助开发者更好地理解WPF中的数据绑定和ListView的使用。 首先,`ListView`的数据源通常是通过`ItemsSource`属性来设置的...
首先,WPF的资源样式通常定义在一个或多个`.xaml`文件中,这些文件可以视为样式库,包含各种控件的外观定义。要将这些资源引入到WinForm项目中,我们需要进行以下步骤: 1. **创建WPF资源文件**:在WPF项目(如`...
解决winform和wpf的相互调用,包含在wpf中调用winform控件,wpf和winform控件的交互等
本教程将基于标题“wpf 后台添加控件(多个)”和描述中的内容,详细介绍如何在WPF应用的后台代码中动态地添加多个控件,并实现滚动条效果。 首先,我们要理解WPF中的控件创建。在XAML中,我们通常静态地定义界面...
“UISample2”很可能是这个源码项目的主程序或示例应用的入口点,它可能包含了一系列的WPF窗口、用户控件、样式和资源文件,用于展示后台管理界面的各种功能和设计模式。 **详细知识点**: 1. **XAML**:WPF使用...
在Windows Presentation Foundation (WPF) ...总结,WPF样式静态资源绑定是构建高效、美观且易于维护的用户界面的关键技术。通过合理利用静态资源,开发者可以创建出一致的视觉体验,同时减少重复代码,提升开发效率。
在Windows Presentation Foundation(WPF)开发中,UI(用户界面)通常由主线程管理,而后台线程用于执行耗时的任务。然而,由于GUI组件不是线程安全的,直接在后台线程修改UI元素可能会导致应用程序崩溃或出现不可...
尽管它们各自有着独特的特性和优势,但在实际项目中,开发者有时需要将两者结合,实现Winform窗体与WPF窗体的互相调用。这可以是因为团队已经有一部分基于Winform的应用,而新功能或界面设计则更适合WPF,或者是为了...
WPF 后台管理UI 界面
标题"**WPF中软键盘调用**"涉及的核心技术就是如何在WPF应用中实现软键盘的显示与隐藏。描述中提到的“1 wpf 中显示、隐藏虚拟键盘的实现;2 基本功能已实现,具体还要根据实际完善;3 主要为了测试使用”意味着这个...
当资源文件(如图片、样式、模板等)被整合到DLL(动态链接库)中时,可以有效地组织代码并实现模块化。下面我们将详细介绍如何在DLL中使用WPF资源文件,以及两种不同的访问方式。 首先,我们需要理解WPF资源的概念...
首先,字体图标是一种将图标设计为Unicode字符的字体,通过设置字体、字号和颜色,可以像显示文字一样显示图标。比如,FontAwesome是一个广泛使用的开源图标库,它包含了大量的矢量图标,每个图标都有对应的Unicode...
三、文件样式的设置 在WPF中,文件通常表示为`TextBox`、`DocumentViewer`等控件,我们可以针对这些控件设置样式,以改变文件显示的外观和行为。例如,对于`TextBox`,我们可以定义一个样式来改变文本的字体、颜色和...
WPF XamlReader 动态Load Xaml文件,包括第三方控件及系统控件,在WPF运行时,XAML解析器公开为2个类,只要使用任何一种.NET语言写的应用程序,都可以在运行时使用XAML。通过这2个类,可以对XAML进行相关操作。
在Windows Presentation Foundation (WPF) 中,调用Win10软键盘是一项常见的需求,尤其是在开发触摸设备应用或者无物理键盘的交互式应用时。WPF是.NET Framework的一部分,用于构建具有丰富图形用户界面的应用程序。...
在.NET框架中,Windows Forms(Winform)和Windows Presentation Foundation(WPF)是两种不同的UI开发技术。Winform主要用于创建传统的桌面应用程序,而WPF则提供了更强大的图形渲染能力和丰富的用户体验设计。有时...
- 在项目中定义接口(IDL文件),声明将被调用的方法和属性。 - 实现接口,生成COM服务器。 - 注册COM组件以便其他程序可以找到和使用它。 2. 在WPF中调用COM组件: - 在WPF应用中添加对`System.Runtime....
这个压缩包文件“经典wpf菜单MenuItem样式1”包含了一个经典的`MenuItem`样式的实现,允许开发者自定义菜单项的外观,以满足特定的设计需求。以下是关于`MenuItem`样式的一些详细知识点: 1. **样式与模板**: - ...