WPF 為資源字典 新增事件響應的後臺類
前言,有許多同學在寫WPF程式時在資源字典里加入了其它控制元件,但又想寫事件來控制這個控制元件,但是資源字典沒有CS檔案,不像窗體XAML還有一個後臺的CS檔案,怎麼辦呢?
在工作時也遇到了這個問題,現在把它分享出來
比如說我們現在要寫一個TabControl控制元件,在TabItem中有一個關閉按鈕或其它按鈕,這個按鈕要能響應某個事件。
現在開始寫資源字典裡的 TabItem的樣式,程式碼如下
<Style x:Key="TIStyle" TargetType="{x:Type TabItem}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type TabItem}"> <Border x:Name="layout" BorderBrush="Gray" BorderThickness="1,1,1,0" Background="{TemplateBinding Background}" CornerRadius="3" Margin="2,0,2,0"> <Grid Height="20"> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition Width="25"/> </Grid.ColumnDefinitions> <TextBlock TextAlignment="Center" Text="{TemplateBinding Header}" Grid.Column="0" Margin="4,0,3,0" VerticalAlignment="Center" HorizontalAlignment="Center"/> <Button Content="X" Grid.Column="1" Height="8" Width="8" Margin="4,1,3,2" Tag="{TemplateBinding Header}" Click="Button_Click" Background="{x:Null}" BorderBrush="{x:Null}" VerticalAlignment="Center"> <Button.Template> <ControlTemplate > <Grid> <Rectangle> <Rectangle.Fill> <VisualBrush> <VisualBrush.Visual> <Path x:Name="btnPath" Data="M0 0L10 10M0 10L10 0" Stroke="Gray" StrokeThickness="1"/> </VisualBrush.Visual> </VisualBrush> </Rectangle.Fill> </Rectangle> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter TargetName="btnPath" Property="Stroke" Value="Red"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Button.Template> </Button> </Grid> </Border> <ControlTemplate.Triggers> <Trigger Property="IsSelected" Value="True"> <Setter Property="Background" Value="White"/> <Setter TargetName="layout" Property="Margin" Value="2,0,2,-1.5"/> </Trigger> <Trigger Property="IsSelected" Value="false"> <Setter Property="Background" Value="LightBlue"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style>
然後為資源字典建一個後臺類DicEvent.cs
public partial class DicEvent : ResourceDictionary
{
public void Button_Click(object sender, RoutedEventArgs e)
{
//省去處理,如果顯示,表明呼叫成功。
MessageBox.Show("你成功了!");
}
}
在資源字典裡,新增對後臺類的引用
主窗口裡呼叫:
<Window x:Class="WpfDicButton.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> <TabControl> <TabItem Header="第一" Height=" 30" Style="{DynamicResource ResourceKey=TIStyle}"></TabItem> </TabControl> </Grid> </Window>
記住APP檔案里加入資源字典
<Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="TabControlDictionary.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources>
測試,小功告成
奉上DEMO 下載地址
相關推薦
WPF 為資源字典 新增事件響應的後臺類
前言,有許多同學在寫WPF程式時在資源字典里加入了其它控制元件,但又想寫事件來控制這個控制元件,但是資源字典沒有CS檔案,不像窗體XAML還有一個後臺的CS檔案,怎麼辦呢? 在工作時也遇到了這個問題,現在把它分享出來 比如說我們現在要寫一個TabControl控制元件,在
(6)為QAction新增事件響應
以上一篇部落格為基礎,在標頭檔案中新增: //新增開啟操作的槽函式 private slots: void open(); 原始檔建構函式中新增: //設定訊號槽的聯接 connect
WPF-- 合併資源字典
原文: WPF-- 合併資源字典 1. 合併多個外部資源字典成為本地字典 語言 XAML 示例程式碼
初學MFC——VS2013下為對話方塊新增訊息響應函式
以響應滑鼠點選“確定控制元件”為例 將滑鼠點選“確定”, 然後找到屬性那一欄,我的介面是右下角有,然後找到閃電的標識點選,就有一堆訊息供你新增,然後找到 BN_CLICKED OnOk, 點一下,有add...,點選這個add就可以了.
為VC6的CHtmlView繼承類新增NavigateError事件響應
在VC7中CHtmlView類本身就有OnNavigateError事件響應可是VC6中卻沒有, 經過一番試驗, 找到以下方法為VC6增加此響應 比如CHtmlCtrl 在標頭檔案中增加以下內容 DECLARE_EVENTSINK_MAP() public: virtual
為ListView每個Item上面的按鈕新增事件在Adapter中響應
//注意原本getView方法中的int position變數是非final的,現在改為final @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolde
為 Frame 新增 OnShow 事件響應函式.
更具體的說明可以參看以下兩處: 這裡只把我實現的過程說明一下: 1. 在要新增 OnShow 事件的 Frame 類中, 其 Private 域新增以下函式宣告 // 手動編寫的 OnShow 事件響應函式 procedure CMShowingChanged(var M: TMessage);
VS2015建立類庫專案後新增不了WPF資源字典,視窗,使用者控制元件處理辦法
開啟專案工程檔案在PropertyGroup標籤最後加上下面3行: <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}&l
[WPF]為舊版本的應用新增觸控支援
之前做WPF開發時曾經遇到這樣一個需求:為一個基於 .NET Framework 3.5開發的老舊WPF程式新增觸控支援,以便於大屏觸控展示。 接手之後發現這是一個大坑。 專案最初的時候完全沒考慮過軟體架構設計,業務邏輯基本都寫在後臺程式碼中,經過兩代程式設計師的開發維護(初代開發者已離職,文件這種東西不
後臺程式碼引用資源字典樣式
1.資源字典定義: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
C#為控制元件動態新增事件繫結的時機
今天遇到個小問題,要為幾十個文字框新增相同的失去焦點事件,常規的辦法是在VS的事件管理器裡面新增,但那樣太繁瑣了,幾十個文字框,要加幾十遍,這行不通。 於是想到動態繫結,第一次嘗試如下: foreach(TextBox tbx in tbxs){ tbx.Lea
RecyclerView為每個item新增點選事件
最終目的模擬ListView的setOnItemClickListener()方法,呼叫者只須呼叫類似於setOnItemClickListener的東西就能獲得被點選item的相關資料。原理為RecyclerView的每個子item設定setOnClickListene
QT 為按鈕新增事件
-.在vs2010環境中。 在QT designer中為helloword.ui新增pushbutton ,返回vs (1):第一種方式: 在helloword.h中新增: public slots: void ClickButton(); 在helloword.cpp中: 建構函式中新增: c
js為li列表新增點選事件
今天看到一個面試題目 //html程式碼 <body> <ul> <li>1</li> <li>
Qt 新增選單及選單的事件響應(完整的示例)
Qt新增選單有兩種方法,一是用程式碼直接手動新增,二是在Qtdesigner中在介面上直接新增。 先介紹用程式碼如何新增。 需要用到兩個類QMenu和QAction,例如我的Demo程式介面如下: 對於“新建”,“編輯”這些主選單項用QMenu, 而"檔案"下面的子選單,“新建”,“開啟”
MFC 錯誤異常,用vs新增資源併為資源定義類後報錯:error C2065 : 未宣告的識別符號
我添加了一個Dialog資源,修改了ID之後右擊資源添加了一個類,在類裡面有一個成員變數: // 對話方塊資料 enum { IDD = IDD_GETIN }; 而在編譯過程中出現報錯,錯誤代號是error C2065 : 未宣告的識別符號,我的第一反應是為什麼
VBA:為動態生成的控制元件新增事件
2.controls.add的時候順便把上一步的變數指向它 Set mycmd = Controls.Add("Forms.CommandButton.1", "CommandButton3", Visible) (adsbygoogle = window.adsbygoo
Java應用程式新增退出事件響應 (關閉虛擬機器而不是程式-system.exit)
/*****************************************************************************本程式僅演示,如何在Java應用程式中新增系統退出事件處理機制**********************************************
(WPF)資源字典
資源字典:資源字典出現的初衷就在於可以實現多個專案之間的共享資源,資源字典只是一個簡單的XAML文件, 該文件除了儲存希望使用的資源之外,不做任何其它的事情。 資
為ListView每個Item上面的按鈕新增事件
1.先看下效果圖: 在這裡僅供測試,我把資料都寫死了,根據需要可以自己進行修改,此外實現ListView上面每個Item上的Button的事件有兩種方法: 1.使用final變數擴充套件區域性變數的生命週期範圍主要程式碼(本文最後附全部程式碼): //注意原本getView方法中的int