`

WPF 后台动态调用样式文件,就像CSS样式表文件一样

wpf 
阅读更多
应用场合:如果您的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后台动态调用样式文件,以实现这一功能。 首先,我们需要理解WPF中的样式和资源。样式(Style)定义了一个UI元素的默认外观属性,如颜色、字体等,而模板(Template)则可以自定义元素的...

    WPF动态调用资源文件

    在Windows Presentation Foundation(WPF)框架中,动态调用资源文件是一种常见的技术,它使得开发者能够在运行时根据需求加载和应用不同的资源。标题中的“WPF动态调用资源文件”特指在WPF应用程序中,如何根据用户...

    WPF后台动态绑定ListView数据源

    本示例重点介绍了如何在后台动态地绑定ListView的数据源,以及如何通过代码添加行和列。这将帮助开发者更好地理解WPF中的数据绑定和ListView的使用。 首先,`ListView`的数据源通常是通过`ItemsSource`属性来设置的...

    winform调用全局wpf资源样式

    首先,WPF的资源样式通常定义在一个或多个`.xaml`文件中,这些文件可以视为样式库,包含各种控件的外观定义。要将这些资源引入到WinForm项目中,我们需要进行以下步骤: 1. **创建WPF资源文件**:在WPF项目(如`...

    winform和wpf的相互调用

    解决winform和wpf的相互调用,包含在wpf中调用winform控件,wpf和winform控件的交互等

    wpf 后台添加控件(多个)

    本教程将基于标题“wpf 后台添加控件(多个)”和描述中的内容,详细介绍如何在WPF应用的后台代码中动态地添加多个控件,并实现滚动条效果。 首先,我们要理解WPF中的控件创建。在XAML中,我们通常静态地定义界面...

    WPF 后台管理UI 2 源码

    “UISample2”很可能是这个源码项目的主程序或示例应用的入口点,它可能包含了一系列的WPF窗口、用户控件、样式和资源文件,用于展示后台管理界面的各种功能和设计模式。 **详细知识点**: 1. **XAML**:WPF使用...

    WPF样式静态资源绑定

    在Windows Presentation Foundation (WPF) ...总结,WPF样式静态资源绑定是构建高效、美观且易于维护的用户界面的关键技术。通过合理利用静态资源,开发者可以创建出一致的视觉体验,同时减少重复代码,提升开发效率。

    WPF后台线程更新UI

    在Windows Presentation Foundation(WPF)开发中,UI(用户界面)通常由主线程管理,而后台线程用于执行耗时的任务。然而,由于GUI组件不是线程安全的,直接在后台线程修改UI元素可能会导致应用程序崩溃或出现不可...

    Winform与WPF窗体互相调用方法

    尽管它们各自有着独特的特性和优势,但在实际项目中,开发者有时需要将两者结合,实现Winform窗体与WPF窗体的互相调用。这可以是因为团队已经有一部分基于Winform的应用,而新功能或界面设计则更适合WPF,或者是为了...

    WPF 后台管理UI 界面

    WPF 后台管理UI 界面

    WPF中软键盘调用

    标题"**WPF中软键盘调用**"涉及的核心技术就是如何在WPF应用中实现软键盘的显示与隐藏。描述中提到的“1 wpf 中显示、隐藏虚拟键盘的实现;2 基本功能已实现,具体还要根据实际完善;3 主要为了测试使用”意味着这个...

    WPF资源文件在DLL中的用法

    当资源文件(如图片、样式、模板等)被整合到DLL(动态链接库)中时,可以有效地组织代码并实现模块化。下面我们将详细介绍如何在DLL中使用WPF资源文件,以及两种不同的访问方式。 首先,我们需要理解WPF资源的概念...

    WPF 字体图标(FontAwesome、IconFont)简单使用源码

    首先,字体图标是一种将图标设计为Unicode字符的字体,通过设置字体、字号和颜色,可以像显示文字一样显示图标。比如,FontAwesome是一个广泛使用的开源图标库,它包含了大量的矢量图标,每个图标都有对应的Unicode...

    WPF文件样式设置秘籍(xaml语言)

    三、文件样式的设置 在WPF中,文件通常表示为`TextBox`、`DocumentViewer`等控件,我们可以针对这些控件设置样式,以改变文件显示的外观和行为。例如,对于`TextBox`,我们可以定义一个样式来改变文本的字体、颜色和...

    WPF XamlReader 动态Load Xaml文件,包括第三方控件及系统控件

    WPF XamlReader 动态Load Xaml文件,包括第三方控件及系统控件,在WPF运行时,XAML解析器公开为2个类,只要使用任何一种.NET语言写的应用程序,都可以在运行时使用XAML。通过这2个类,可以对XAML进行相关操作。

    WPF调用WIN10软键盘

    在Windows Presentation Foundation (WPF) 中,调用Win10软键盘是一项常见的需求,尤其是在开发触摸设备应用或者无物理键盘的交互式应用时。WPF是.NET Framework的一部分,用于构建具有丰富图形用户界面的应用程序。...

    Winform调用WPF控件

    在.NET框架中,Windows Forms(Winform)和Windows Presentation Foundation(WPF)是两种不同的UI开发技术。Winform主要用于创建传统的桌面应用程序,而WPF则提供了更强大的图形渲染能力和丰富的用户体验设计。有时...

    WPF调用COM组件

    - 在项目中定义接口(IDL文件),声明将被调用的方法和属性。 - 实现接口,生成COM服务器。 - 注册COM组件以便其他程序可以找到和使用它。 2. 在WPF中调用COM组件: - 在WPF应用中添加对`System.Runtime....

    经典wpf菜单MenuItem样式1

    这个压缩包文件“经典wpf菜单MenuItem样式1”包含了一个经典的`MenuItem`样式的实现,允许开发者自定义菜单项的外观,以满足特定的设计需求。以下是关于`MenuItem`样式的一些详细知识点: 1. **样式与模板**: - ...

Global site tag (gtag.js) - Google Analytics