1. 程式人生 > >WPF中的動態換膚

WPF中的動態換膚

  在WPF中換膚異常方便,只有將視窗資源設定為不同的ResourceDictionary就可以了。而且可以換得很徹底,甚至是徹底改變整個視窗上控制元件的種類,大小,個數等。 下面是一個實現。 建立一個叫做Blue.xaml的檔案,在上面寫入 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"     >     <StackPanel x:Key="Root" Height="120">     <Button Background="Blue" Height="40"/>     <Button Background="Blue" Height="40"/>     <Button Background="Blue" Height="40"/>     </StackPanel> </ResourceDictionary> 然後建立一個叫Green.xaml的檔案,在上面寫入 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    >     <Grid x:Key="Root" Width="170" Height="90">     <Grid.ColumnDefinitions>        <ColumnDefinition Width="80"/>     <ColumnDefinition Width="80"/>     </Grid.ColumnDefinitions>     <Grid.RowDefinitions>     <RowDefinition Height="40"/>     <RowDefinition Height="40"/>
    </Grid.RowDefinitions>     <Button Background="Green" Grid.Column="0" Grid.Row="0"/>     <Button Background="Green" Grid.Column="1" Grid.Row="0"/>     <Button Background="Green" Grid.Column="0" Grid.Row="1"/>     <Button Background="Green" Grid.Column="1" Grid.Row="1"/>     </Grid>
</ResourceDictionary> 然後是主視窗的xaml <Window x:Class="SkinTest2.Window1"     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"     Title="Window1" Height="150" Width="300" Content="{DynamicResource Root}"> </Window> 將視窗的Content設定為一個動態資源Root就行了。 新增一個新類 Blue,在它的建構函式中設定將Blue.xaml中的ResourceDictionary設定給視窗             ResourceDictionary resDic = new ResourceDictionary();             resDic.Source = new Uri("Blue.xaml", UriKind.Relative);             window.Resources = resDic; StackPanel stackPanel = window.Content as StackPanel; 通過轉型來得到Blue中的StackPanel, 這種方法看起來有的粗魯,但是沒有想到別的辦法             for (int i = 0; i < stackPanel.Children.Count; i++)             {                 button[i] = stackPanel.Children[i] as Button;                 button[i].Click += handler[i];             } 遍歷stackPanel的子元素,把Button一個個地取出來新增事件。沒法子。在寫Blue.xaml中的ResourceDictionary的時候不能給資源StackPanel的子元素再設定x:key了 新增一個Green類,同樣這麼幹。 最後測試一下,在主視窗中放入一個托盤按鈕,方便一會切換面板         private Blue blue;         private Green green;         private System.Windows.Forms.NotifyIcon notifyIcon; }         public Window1()         {             InitializeComponent();             notifyIcon = new System.Windows.Forms.NotifyIcon();             notifyIcon.Icon = Properties.Resources.icon2;             System.Windows.Forms.ContextMenu contextMenu = new System.Windows.Forms.ContextMenu(); 給contextMenu新增兩個選單項             contextMenu.MenuItems.Add("Blue").Click +=                 ((sender, e) =>                 {                     if (blue == null)                     {                         blue = new Blue(this);                         green = null;                     }                 });             contextMenu.MenuItems.Add("green").Click +=                 ((sender, e) =>                 {                     if(green == null)                     {                         green = new Green(this);                         blue = null;                     }                 }); 這裡用了3.0中的Lambda表示式,看起來還不賴,比起boost中的那個類庫級的Lambda看起來自然多了。             notifyIcon.ContextMenu = contextMenu;             notifyIcon.Visible = true; 右擊托盤圖示,可以任意切換。當然換得這麼徹底也很少見,都換了,和新建一個視窗有啥區別: )  

相關推薦

WPF動態

  在WPF中換膚異常方便,只有將視窗資源設定為不同的ResourceDictionary就可以了。而且可以換得很徹底,甚至是徹底改變整個視窗上控制元件的種類,大小,個數等。 下面是一個實現。 建立一個叫做Blue.xaml的檔案,在上面寫入 <ResourceDic

轉載:ASP.NET MVC擴展自定義視圖引擎支持多模板&動態skins機制

生效 amp 文件名 attr 情況 etc lis new out ASP.NET mvc的razor視圖引擎是一個非常好的.NET MVC框架內置的視圖引擎。一般情況我們使用.NET MVC框架為我們提供的這個Razor視圖引擎就足夠了。但是有時我們想在我們的項目支持多

WPF 動態創建和刪除控件

null 取消 top font har 刪除 find 不能 led 原文:WPF 中動態創建和刪除控件 動態創建控件 1.容器控件.RegisterName("Name"

WPF動態載入XAML的控制元件

原文: WPF中動態載入XAML中的控制元件 using System; using System.Collections.Generic; using System.Linq; using System.Text;

Android動態框架實現

今天介紹一下Android 中的常用的換膚策略,同時動手實現一個動態換膚的框架 先上效果圖:   換膚概念   換膚: 在android中是指 對 文字、 顏色、 圖片 等的資源的更換。 人 : 對應於現實生活中,就是我們的 膚色 、 衣服 等的

動態

因專案需要,對專案內的頁面需要進行動態換膚。網上找了些通用解決辦法。 核心問題: 如何能快速的切換主題色?(只有固定的一種面板) 如果又想把主題色切換為以前的呢?(有多種可切換的面板) 該以何種方式編寫標籤的css屬性? 這裡分享下兩種情形: 1、所有樣式的cs

WPF動態更新TextBlock文字的超連結

    在寫小軟體的時候突然用到需要對顯示的文字動態更新,然後裡面還有超連結,在普通的winform裡面好 像有Linklabel,但是wpf中沒找到,反正看到有Textblock裡新增超連結的例子,就嘗試的改了下,但是對於 超連結的更新始終沒找到好方法,偶然翻著MSDN找到

WPF動態載入資料

<!--動態生成一組按鈕--> <StackPanel> <ItemsControl ItemsSource="{Binding Picture}">

Android 以apk包方式共享資源(動態)的實現方式

一 應用場景: 之前的一個專案是一個Android系統的系統應用的重構開發,專案中有很多個應用,這些 應用有許多相同的介面和互動;另外,這一套應用的介面可能會需要經常調整來適配不同的客戶需求。為了減少開發和維護的工作量,我把這些應用的資源統一起來 一起維護,相同的資源不需要

WPF 單個模組

xmal: <Window x:Class="wpfSkin.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006

WPF的DEVWPF自帶控制元件一起

     小弟最近採用WPF,想簡便的換膚,所以研究了一下!好了,廢話不多說。先上圖,上面ribbon是DEV控制元件 下面亂亂的全是WPF自帶控制元件哦。      換膚步驟如下:     1、兩個DLL ,DevExpress.DemoData.v13.1.Cor

WPF 動態建立和刪除控制元件

動態建立控制元件 1.容器控制元件.RegisterName("Name",要註冊的控制元件)   //註冊控制元件 2.容器控制元件.FindName("Name") as  控制元件型別            //找到控制元件並轉換成相應型別 注意:僅通過 控制元件.N

Android無縫切換主題,動態

說起Android的動態換膚方案,可謂是人云亦云,各有各的方法,魚龍混雜,我實在是參考不來一個好的換膚方案。 於是準備自己搞一個。 在這裡我是拒絕寫多個style實現換膚的 那麼只能用Java程式碼來實現(話說這樣是不是有點難度啊,答案是否定的,難倒是不難,就是稍微麻

Qt編寫安防視訊監控系統11-動態

一、前言 Qt中的動態換膚技術是非常一流的,直接呼叫qApp->setStyleSheet(qss);就可以對整個應用程式進

網頁動態載入(js檔案和css檔案即)

導語: 最近經常遇到一些人問起網頁中按需載入的需求,例如網頁load時不載入js檔案,只有當使用者觸發某個事件時才按其所需載入其所需的js檔案,又比如使用者可以隨意地切換網頁的顏色等。縱觀這些需求分析,不外乎就是js裡面的一個動態載入,因此有必要做幾個demo以供大家參考。

WPF字符串行符

pre 必須 reserve key sys span pan new 字符 <sys:String x:Key="NewUpdateWillShow" xml:space="preserve">第一行&#13;第二行&#13;</sys:

wpf靜態資源和動態資源的區別

一次 div font size res static 靜態 mil source 靜態資源(StaticResource)指的是在程序載入內存時對資源的一次性使用,之後就不再訪問這個資源了。 動態資源(DynamicResource)指的是在程序運行過程中然會去訪問資源。

WPF的程式碼區域動態設定IMAGE的圖片

兩步走: 1. 使用下面程式碼制定檔案路徑 "pack://application:,,,/AssembleName;component/Resources/Port3.png" using System.Windows.Media.Imaging;//BitmapImage p

vue利用sass實現整體和字型大小設定

一、前言  利用Sass預處理實現換膚和字型大小調整。  實現方法:1.利用全域性變數和bus事件,使用js方式調整字型和顏色(這裡暫不討論);       2.利用Sass預處理方式實現         主題更換:使用setAttribute()為html根節點新增屬性,根據屬性的值再進行不同主題的

C# Winform窗體的美化—— 用IrisSkin輕鬆實現功能

今天經前輩提醒才知道winform窗體還有美化工具,呵呵,不得不說,孤陋寡聞了。下面總結一下irisskin2的使用步驟和遇到的問題及解決辦法。 1、網址:http://www.pc6.com/softview/SoftView_70918.html#down