C#.NET应用主题的办法

.NET和C#的区别 .NET框架(.NET Framework) 是由微软开发,一个致力于敏捷软件开发(Agile softwaredevelopment)、快速应用开发(Rapidapplication development)、平台无关性和网络透明化的软件开发平台。.NET是微软为下一个十年对服务器和桌面型软件工程迈出的第一步。 阅读详情

1。全局主题:在Web.config中<system.web>中添加<pages StyleSheetTheme ="ThemeName"/>节,这样在整个应用中都会自动应用名为ThemeName 的主题

       2。页面主题:在ASPX文件顶部加入:<%@ Page Language="C#" StylesheetTheme=" ThemeName " %>,这样当前页面都会应用名为ThemeName 的主题,或者在ASPX_CS中加(Page_Load方法)入如下代码 Page. StyleSheetTheme = “ThemeName”;

       3。角色主题:需要使用masterpage 来辅助实现 ,通过User.IsInRole(“RoleName”) 来判断用户是否属于某个角色,然后决定使用何种主题(Page. StyleSheetTheme = “ThemeName”);当然,使用这种办法还可以应用用户选择的主题 。


       4。给某个控件应用特定的样式,那么需要设置控件的SkinId属性,然后在skinid中填写我们在skin文件里定义好的样式的skinid就ok了!如果你不希望某个控件应用theme的样式,你只需设置Label的EnableTheming属性为false的时候就可以了。


5。theme中包含CSS:

  theme中也可以使用.css文件,当你把.css文件放在1个theme目录下后,在用到了这个theme的页面中自动会应用你的.css的


一般引用主题和皮肤的方式主要有这两种:stylesheettheme和theme他们用法差不多,就是执行的优先级不一样:

1在页面上定义theme时:页面只使用theme的主题样式,不会使用页面上的用户再定义的样式。
2当定义了stylesheettheme时,页面先加载stylesheettheme属性中的样式,再合并页面上的样式,如果有一样的样式定义,就取页面中的样式。
3两种皆有会先加载stylesheettheme的样式,再加载页面中的样式,再加载theme中的样式,如果有一样的样式,则后面的样式覆盖前面加载的样式。


工作原理

    不同的主题和皮肤之间的不同主要是页面和页面中的控件的样式(包括字体、段落、背景、边框等等)、部分图片的不同。

    传统的完全使用CSS来表现不同的主题的方案,在处理图片和图片按钮的地方往往心有余而力不足。而在aspnet2.0里面一切都已经变得简单。

    主题和皮肤是 dotnet framework2.0内建支持的,服务器控件添加了SkinId属性,Page类也添加了Theme 和 StyleSheetTheme 属性,其目的就是优雅的支持Skin。在应用指定了主题之后,相关的页面会自动链接位于主题目录下的css文件和skin文件,css的用法跟传统的用法没有什么区别,而skin文件则以一种类似于css的方式工作,指定了SkinId的服务器控件会自动从skin文件中加载并附加匹配的属性或样式(最常用的是Image 和ImageButton的ImageUrl属性,这样做可以使页面在不同的主题下)---这是在服务器端完成的。由于skin文件在使用后是缓存在内存中的,所以效率不会有问题。


后台代码轻松为网站换府肤

  前面讲的都是在aspx文件或web.config中应用theme,而在blog这样的每个用户都有不同的skin的网站中用上面的方法来实现换skin显然是不方便的。

  下面就介绍怎么在后台代码中动态的引用theme来解决上面的情况,theme必须在page被请求的最早期就应用上,所以我们必须在Page_PreInit事件中写代码,代码很简单,就1句:

Page.Theme = "...";

  这里我们只要从数据库中去读取每个用户设置的不同theme名就可以轻松实现每个用户都有不同的skin了。

上面的可以认为是费话,下面开始全新的制作方法


下面我是我自己写的一个例子
首先创建一个app_themes文件夹
然后再下面创建两个主题 blue,red 其实就是两个文件夹
然后我们就可以分别在不同的主题下面创建不.skin文件或者.css样式
在这里我只定义了分别定义了一个skin的文件,里面具体怎么定义大家自己去发挥了!只要别把两个主题定义的一样就ok了呵呵!

好了,现在我们就来实现在后台控制主题
1。aspx文件里
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Template.aspx.cs" Inherits="admin_Template" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="
http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>模板管理</title>
<script language="javascript" type="text/javascript">
    <!--
    function clickit() {
        var dom=document.all;
        var el=event.srcElement;
        if(el.tagName=="INPUT"&&el.type.toLowerCase()=="radio")
        {
                for(i=0;i<dom.length;i++)
                {
                        if(dom[i].tagName=="INPUT"&&dom[i].type.toLowerCase()=="radio")
                        {
                                dom[i].checked=false;
                        }
                }
        }
        el.checked=true;
}

   //-->
   </script>
</head>
<body>
<form id="f1" runat="server">
     <div class ="inner2">
      <asp:Repeater ID="Repeater1" runat="server">
            <ItemTemplate>
              <ul ><li>
                     <img src="../image/<%#DataBinder.Eval(Container.DataItem, "TemplateImage")%>"/><br />
                     <asp:Label ID="Label1" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.TemplateName") %>'></asp:Label><br />
                     <asp:Label ID="Label2" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.SetFolder") %>' Visible="false"></asp:Label>
                     <asp:Label ID="Label3" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.CssName") %>' Visible="false"></asp:Label>
                     <asp:RadioButton ID="RadioButton1" runat="server" onclick="clickit();"/>
                     </li></ul>
            </ItemTemplate>
        </asp:Repeater>
         <div style ="text-align :center;"><asp:Button ID="SaveButton1" runat="server" Text="选好了,确定!" onclick="SaveButton1_Click"/></div><br />
        </div><br />
   </form>
</body>
</html>
2。aspx.cs文件里:
    //更换网站主题
using System.Data.SqlClient;
public partial class admin_Template : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

        if (Session["UserNm"] != null)
        {
            if (Session["UserNm"] != "")
            {

            }
            else
            {
                Response.Write("<script>alert('操作失败!没有登陆或者登陆超时');location.href='adminlogin.aspx';</script>");
            }
        }
        else
        {
            Response.Write("<script>alert('操作失败!没有登陆或者登陆超时');location.href='adminlogin.aspx';</script>");
        }
        if (!IsPostBack)
        {
            SqlConnection con = new SqlConnection("数据库连接语句,我就不写了");
            string sql1 = "select top 5 * from [Template] order by [Templateid] desc";
            SqlDataAdapter da1 = new SqlDataAdapter(sql1, con);
            DataSet ds1 = new DataSet();
            da1.Fill(ds1);
            Repeater1.DataSource = ds1;
            Repeater1.DataBind();
        }
    }
    protected void SaveButton1_Click(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection("数据库连接语句,我就不写了");
        con.Open();
        int intI = 0;
        try
        {

            for (intI = 0; intI < this.Repeater1.Items.Count; intI++)
            {
                RadioButton itemCheck = (RadioButton)this.Repeater1.Items[intI].FindControl("RadioButton1");
                if (itemCheck.Checked)
                {
                    Label Label2 = (Label)this.Repeater1.Items[intI].FindControl("Label2");
                    Label Label3 = (Label)this.Repeater1.Items[intI].FindControl("Label3");
                    string sql = "Update user set Template='" + Label2.Text.ToString() + "',SelectCss='" + Label3.Text.ToString() + "' where id=" + '2';(注意!,如果是多用户的话这里的改成 where UserId=" + this.Session["UserId"].ToString();)                    SqlCommand cmd = new SqlCommand(sql, con);
                    cmd.ExecuteNonQuery();
                }
            }
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
        Response.Write("<script>alert('操作成功!');location.href='Template.aspx';</script>");
        con.Close();
    }
}


看来我们得好好测试测试了!

3。在所有需要应用主题的页面的.aspx.cs文件里写上下面这个方法
    //实现更换皮肤效果
    protected void Page_PreInit(object sender, EventArgs e)
    {
        SqlConnection con1 =new SqlConnection("数据库连接语句,我就不写了");
        con1.Open();
        string sql2 = "select Template from [user] Where [id]=" + '2';(注意!,如果是多用户的话这里的改成 where UserId=" + this.Session["UserId"].ToString();)
        SqlDataAdapter Da = new SqlDataAdapter(sql2, con1);
        DataSet Ds = new DataSet();
        Da.Fill(Ds);
        DataTable dt = Ds.Tables[0];
        if (Ds.Tables[0].Rows.Count > 0)
        {
            Page.Theme = Ds.Tables[0].Rows[0][0].ToString();
        }
        else
        {
            Page.Theme = "default";
        }
 }

基于AutoUpdater.NET类库实现C# .NET桌面应用程序自动更新 基于AutoUpdater.NET类库实现基C#桌面应用程序自动检测更新升级 阅读详情

相关推荐

使用C# ASP.NET框架构建Web应用程序

ASP.NET是一种用于构建Web应用程序的开发框架,而C#是一种用于编写.NET应用程序的编程语言。本文将详细介绍ASP.NET框架的核心概念和功能,并提供一些示例来帮助读者更好地理解和应用C# ASP.NET框架。C#是一种用于编写.NET应用程序的编程语言,它与ASP.NET框架紧密结合,可以帮助我们构建强大的Web应用程序。在使用C#编写ASP.NET应用程序时,我们可以使用C#语言的各种特性和功能,如面向对象编程、LINQ查询、异常处理等。通过使用C#语言的各种功能,我们可以实现我们的业务需求。

Lsruhfg的博客 1671

asp.net新特性theme的使用和介绍!

应用主题的办法办法              1。全局主题:在Web.config中中添加节,这样在整个应用中都会自动应用名为ThemeName 的主题        2。页面主题:在ASPX文件顶部加入:,这样当前页面都会应用名为ThemeName 的主题,或者在ASPX_CS中加(Page_Load方法)入如下代码 Page. StyleSheetTheme = “ThemeName”

澜澜 1736

C#与.Net Framework的联系和区别

C#语言    C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。并定于在微软职业开发者论坛(PDC)上登台亮相。C#是微软公司研究员Anders Hejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi

邢金聪 廊坊师范学院九期信息技术提高班 2万+

c#Windows项目(设置全局皮肤)

c#Windows项目(设置全局皮肤) 新建项目,导入依赖dll,dev安装文件导入() 导入依赖包 D:\Program Files (x86)\DXperience 12.1\Bin\Framework\DevExpress.BonusSkins.v12.1.dll 皮肤依赖; DevExpress.XtraBars.v12.1、DevExpress.XtraEditors.v12.1、DevExpress.XtraGauges.v12.1.Win、DevExpress.XtraGrid.v12.1、D

weixin_43776085的博客 453

Winform UI界面设计例程(一)多窗口主题搭配

完全纯C#代码编写,没有引用任何第三方DLL,本专栏会讲解二十多篇关于WINFORM UI界面设计,包括主题切换,报表图表等一些列的案例

奔跑的郑的博客 1万+

掌握.NET(C#)中的Ajax与JSON应用实例

本文还有配套的精品资源,点击获取 简介:在.NET框架中,C#作为主要编程语言,可以利用Ajax技术实现页面的异步数据更新,从而提升用户体验。JSON作为一种轻量级的数据交换格式,常用于服务器与客户端之间的数据传输。本文将深入探讨如何在.NET(C#)环境中,通过Ajax和JSON技术实现Web应用的前后端交互。介绍了Ajax的工作原理、JSON的特点,以及C#如何利用**...

weixin_33308579的博客 2790

Winform(C#) 国内开源美化控件主题库2:花木兰控件库

Winform(C#) 国内开源美化控件主题库2:花木兰控件库 地址 博客:https://www.cnblogs.com/tlmbem/控件的介绍。 gitee:https://gitee.com/tlmbem/hml 介绍 基于 C#(语言) 4.0 、 VS2019 、 Net Framework 4.0(不包括Net Framework 4.0 Client Profile) 开发的Winform控件库。为了兼容性采用了C#(语言) 4.0版本,低版本VS也可以编译该项目。整个控件控除了动画函数由S

集电极 2万+

C# .NET框架实现简单计算器应用指南

本文还有配套的精品资源,点击获取 简介:本文将指导如何利用C#和.NET框架创建一个具备标准和科学模式的简单计算器。计算器包括图形用户界面,支持键盘输入,以及基本和科学计算功能。通过实践,学习C#编程语言和.NET框架的运用,涉及用户界面设计、事件绑定、计算逻辑实现以及用户偏好存储。 1. C#和.NET框架基础介绍 1.1 C#语言概述 C#(发音为 "...

weixin_30661119的博客 1539

5款好看的winform开源UI库

NanUI 的渲染引擎 WinFormium 基于谷歌可嵌入的浏览器框架 Chromium Embedded Framework,因此用户可以使用各种前端技术 HTML5/CSS3/JavaScript 和框架 React/Vue/Angular/Blazor 设计和开发.NET 桌面应用程序的用户界面。c#winform自定义控件,对触屏具有更好的操作支持,项目是基于framework4.0,完全原生控件开发,没有使用任何第三方控件,你可以放心的用在你的项目中。5款好看的winform开源UI库。

immense的博客 8480

C#版ASP.NET实例教程及应用

ASP.NET是微软公司开发的一个开源的web框架,用于构建Web应用程序和Web服务。它使用.NET Framework运行时环境,能编写出功能强大、高效能、可扩展的web应用程序。ASP.NET框架的独特之处在于其组件化的页面模型,它允许开发者将每个页面划分为多个独立的组件,从而提高了代码的复用性和模块化。ASP.NET不仅支持传统的服务器控件,还支持Web表单和Web Pages的开发方式。这种框架的灵活性让开发者可以根据需要选择不同的开发模式。

weixin_35045970的博客 1236

winform(c#)最全60种非常漂亮界面样式\皮肤(经典)

winform(c#)最全60种非常漂亮界面样式\皮肤(经典)

【C#.NET】C#.NET应用主题的办法

1。全局主题:在Web.config中<system.web>中添加<pages StyleSheetTheme ="ThemeName"/>节,这样在整个应用中都会自动应用名为ThemeName 的主题 2。页面主题:在ASPX文件顶部加入:<%@ Page Language="C#" StylesheetTheme=" ThemeName " %>...

weixin_30530939的博客 189

主题示例ThemeDemo

里面有文章详细说明如何定义主题,如何以编程方式应用 ASP.NET主题

.net和c#的区别

今天和同事闲聊的时候,突然发现了一个非常需要重申的问题。我们经常会问你们平台是用什么开发的呀?很多人会混淆了.net和C#的含义;下面我们来温习一下基础知识。.net的含义:一般指.Net Framework框架,是Microsoft为开发应用程序而创建的一个具有革命意义的平台。内容:    .net有2种交互模式,分别是B/S,C/S。主要包含一个庞大的代码库,可从在客户语言(如C#)中通 过面...

木子夏_欣儿的博客 6万+

避坑指南:ESP32S3驱动INMP441麦克风时的常见硬件冲突与解决方案

本文详细解析了ESP32S3驱动INMP441麦克风时常见的硬件冲突问题,包括GPIO资源冲突、电源噪声、I2S时钟同步等,并提供了实用的解决方案和优化策略。通过实测数据和代码示例,帮助开发者快速排查和解决音频设备开发中的疑难问题,提升系统稳定性和音频质量。

embedding5hiker的博客 943

nnU-Net v2实战:从零开始配置环境与训练自定义医学影像数据集

本文详细介绍了nnU-Net v2在医学影像分割中的实战应用,从环境配置到自定义数据集训练的全流程。重点讲解了Python 3.9+环境搭建、PyTorch安装技巧、医学影像数据预处理规范,以及五折交叉验证训练方法,帮助开发者快速掌握这一先进的医学影像分析工具。

weixin_28718487的博客 352

C#与.NET的区别

今天和同事闲聊的时候,突然发现了一个可能大家都以为自己很清楚却容易被忽略和混淆的问题。 .net是不是就是c#? 你大脑里的第一个答案是什么呢? 下面我们来温习一下基础知识。 .net的含义: 一般指.Net Framework框架,是Microsoft为开发应用程序而创建的一个具有革命意义的平台。 上图是一个简单的.net框架。 .NET Framework是用于Windows的新托管代码编程模型。它强大功能与新技术结合起来,用于构建具有视觉上引人注目的用户体验的应用程序,实现跨技术边界的无

liwei15889790675的博客 7982

使用DevExpress22.X(Patch)控件库在VisualStudio2022使用C#进行Winform、WPF应用的开发,看这一篇就够了!

写在开头,Dev Express是个十分强大的控件库(下文简称Dev),但碍于其高昂的使用费用,“出于学习目的”,我们一般使用的都是Patch版本(在版权意识日趋加强的当下,不要提那两个字,现在加上那些字,百度都搜不出内容)。

平凡之路 2万+

Electron.NET 应用主题切换:实现亮暗模式的完整方案

用户对应用界面的视觉体验要求日益提高,主题切换功能已成为现代桌面应用的标配。Electron.NET 提供了原生的主题管理 API,使开发者能够轻松实现系统主题跟随、手动切换及主题事件监听等功能。本文将详细介绍如何在 Electron.NET 应用中集成亮暗模式切换功能,包括 API 使用、界面适配、状态保存及实际案例。 ## 主题管理核心 API Electron.NET 的主题管理功能主要...

gitblog_01010的博客 793

WinCC动态选择报警记录案例

本例中需要确认查询的时间段以及查询的关键字,然后通过一个按钮来执行报警数据查询脚本,并把查询出的结果加载到当前报警控件中。<本例中数据查询脚本的思路是根据选项组所选定的参数加载相应的归档变量到在线趋势控件,根据设定的查询时间范围设定控件时间轴的开始时间及结束时间。本文以 WinCC V8.0为例,介绍如何动态的查询WinCC报警记录,包括关键字查询/时间&关键字查询,如图1所示。<在WinCC变量管理中创建不同的变量组,并在变量组下创建相应的变量,如图2 所示(下图并非实际变量值)。

weixin_45072604的博客 2715

mobaXterm连接vmWare虚拟机上的centOS7提示连接失败的解决方法

1.问题描述: mobaXterm安装后连接虚拟机vmWare上的centOS7发现连接不上,如下图所示: 2.解决方法 先是查了一下centOS的ip 开始错误的以为 virbr0: 后面的inet就是虚拟机的IP 实则不然(正确的ip是在ens33后面的inet中的ip,大佬们勿喷) 这个值需要配置一下的,具体配置过程如下: step1: 进入centOS下的/...

hss19214的博客 7890

.NET主题样式 的应用和注意事项(超重要)

原文地址:理论上上来说,不同的主题中的样式表和SKIN文件的结构都应该是完全相同的。 3)设置你要应用主题的控件的css样式名为css中定义的样式名(比如column、gradient) 设置你要应用主题的服务器控件的SkinId为Skin文件中定义的skinid(比如login、create等),这样在Skin中定义的控件属性会自动附加到当前的控件上(内部也是使用CSS实现的) 4) 应用

Hurry的专栏 2068

Roboguide与TIA V16通讯

Roboguide与TIA V16通讯

haier123888的博客 2676

ASP.NET中主题的创建和应用

1创建ASP.NET网站 模板->选择 添加ASP.NET文件夹 下面的属性

张亚运的专栏 3818

FPGA 学习笔记:解决FPGA程序固化重新上电程序不运行的问题

FPGA 学习笔记:解决FPGA程序固化重新上电程序不运行的问题

坚韧与专注 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: StylesheetTheme
下一篇: ASP.NET中Theme使用方法详解
rubychen410
博客等级 码龄19年 32粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值