`

获取WPF所有控件的模板内容

 
阅读更多

 

1. 首先创建XMAL文件
<Window x:Class="ControlTemplateBrowser.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
	    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
	   Title="ControlTemplateBrowser" Height="544" Width="713" Loaded="Window_Loaded">  
   <Grid Margin="10" Name="grid">  
	      <Grid.ColumnDefinitions>  
	      <ColumnDefinition Width="*">ColumnDefinition>  
	       <ColumnDefinition Width="3*">ColumnDefinition>  
	      Grid.ColumnDefinitions>  
	      <ListBox DisplayMemberPath="Name" Name="lstTypes" SelectionChanged="lstTypes_SelectionChanged">ListBox>  
      <TextBox Grid.Column="1" Name="txtTemplate" TextWrapping="Wrap" VerticalScrollBarVisibility="Visible" FontFamily="Consolas">TextBox>        
	     <Grid>  
	<Window>  

 
2. 编写程序代码
	 using System;  
	 using System.Collections.Generic;  
	 using System.Text;  
	 using System.Windows;  
	 using System.Windows.Controls;  
	 using System.Windows.Data;  
	 using System.Windows.Documents;  
	 using System.Windows.Input;  
	 using System.Windows.Media;  
	 using System.Windows.Media.Imaging;  
	 using System.Windows.Shapes;  
	 using System.Reflection;  
	 using System.Xml;  
	 using System.Windows.Markup;  
	   
	   
	 namespace ControlTemplateBrowser  
	 {  
	     ///   
	     /// Interaction logic for Window1.xaml   
	     ///    
	   
	     public partial class Window1 : System.Windows.Window  
	     {  
	   
	         public Window1()  
	         {  
	             InitializeComponent();  
	         }  
	   
	         private void Window_Loaded(object sender, EventArgs e)  
	         {                      
	             Type controlType = typeof(Control);  
	             List derivedTypes = new List();  
	   
	             // Search all the types in the assembly where the Control class is defined.   
	             Assembly assembly = Assembly.GetAssembly(typeof(Control));  
	             foreach (Type type in assembly.GetTypes())  
	             {  
	                 // Only add a type of the list if it's a Control, a concrete class, and public.   
	                 if (type.IsSubclassOf(controlType) && !type.IsAbstract && type.IsPublic)  
	                 {  
	                     derivedTypes.Add(type);  
	                 }  
	             }  
	               
	             // Sort the types by type name.   
	             derivedTypes.Sort(new TypeComparer());  
	   
	             // Show the list of types.   
	             lstTypes.ItemsSource = derivedTypes;  
	         }  
	   
	         private void lstTypes_SelectionChanged(object sender, SelectionChangedEventArgs e)  
	         {              
	             try  
	             {  
	                 // Get the selected type.   
	                 Type type = (Type)lstTypes.SelectedItem;                                              
	   
	                 // Instantiate the type.   
	                 ConstructorInfo info = type.GetConstructor(System.Type.EmptyTypes);  
	                 Control control = (Control)info.Invoke(null);  
	                                   
	                 Window win = control as Window;  
	                 if (win != null)  
	                 {                      
	                     // Create the window (but keep it minimized).   
	                     win.WindowState = System.Windows.WindowState.Minimized;  
	                     win.ShowInTaskbar = false;  
	                     win.Show();  
	                 }  
	                 else  
	                 {  
	                     // Add it to the grid (but keep it hidden).   
	                     control.Visibility = Visibility.Collapsed;  
	                     grid.Children.Add(control);  
	                 }  
	   
	                 // Get the template.   
	                 ControlTemplate template = control.Template;  
	  
	                 // Get the XAML for the template.   
	               XmlWriterSettings settings = new XmlWriterSettings();  
	                 settings.Indent = true;  
	                 StringBuilder sb = new StringBuilder();  
	               XmlWriter writer = XmlWriter.Create(sb, settings);  
	               XamlWriter.Save(template, writer);  
	
	                // Display the template.   
	               txtTemplate.Text = sb.ToString();  
	                 
	                 // Remove the control from the grid.   
	                 if (win != null)  
	               {  
	                     win.Close();  
	                }  
	              else  
	            {  
	                   grid.Children.Remove(control);  
	                 }  
	            }  
	          catch (Exception err)  
	          {  
	               txtTemplate.Text = "<< Error generating template: " + err.Message + ">>";  
	           }  
	       }  
	   }  
	  
	    public class TypeComparer : IComparer  
	     {  
	        public int Compare(Type x, Type y)  
	        {  
	           return x.Name.CompareTo(y.Name);  
	        }  
	    }  
	}  

 

 

分享到:
评论

相关推荐

    WPF标准控件模板查看程序(含代码)

    这个程序提供了直观的方式来查看和理解每个控件模板的结构,这对于学习和理解WPF控件的呈现机制非常有帮助。 **四、使用代码查看控件模板** 在代码中查看控件模板,可以通过以下步骤: 1. 创建一个`...

    WPF日期控件模板重写

    然而,为了满足特定的设计需求或提供更丰富的用户体验,有时我们需要对这些控件进行自定义,这就是"WPF日期控件模板重写"的主题所在。 首先,我们要理解`DatePicker`的基本用法。`DatePicker`控件包括一个文本框和...

    WPF自定义用户控件一个小例子

    在本文中,我们将深入探讨如何在Windows Presentation Foundation (WPF) 中自定义用户控件。WPF是.NET Framework的一部分,用于构建丰富的桌面应用程序,而自定义用户控件则是提升应用程序可复用性和功能的关键。 ...

    Wpf自定义控件ToggleSwitch

    本项目“WpfToggleSwitch”就是这样一个例子,它是一个从国外开源网站获取的优秀自定义控件,用于创建类似iOS或Android设备上的切换开关效果。这种控件在UI设计中非常常见,用于开启或关闭某个功能,例如设置开关、...

    WPF查找一个控件下的子控件

    2. **VisualTreeHelper.GetChildrenCount()**:获取父控件的子控件数量,用于配合GetChild()遍历所有子控件。 ```csharp int childrenCount = VisualTreeHelper.GetChildrenCount(parentControl); for (int i = 0; ...

    WPF的控件编程、面板布局、2D图形等具体内容。

    这展示了WPF控件的强大可定制性,允许开发者超越标准控件的限制,实现独特的用户界面设计。 4. **事件处理** 在WPF中,可以通过XAML或代码-behind添加事件处理程序。在属性窗口的事件页,可以找到如`Click`等事件...

    WPF日期时间控件-DateTimePicker

    总的来说,这个压缩包提供了一个完整的WPF DateTimePicker实现,对于学习和应用WPF控件开发具有很高的价值。无论是初学者还是经验丰富的开发者,都能从中获取到关于日期时间控件设计和实现的宝贵知识。通过深入研究...

    WPF控件样式和模板手册

    ### WPF控件样式和模板手册 #### 概述 WPF(Windows Presentation Foundation)是Microsoft提供的一种用于构建Windows客户端应用程序的技术框架。它允许开发者利用XAML和C#(或其他.NET语言)创建丰富的用户界面。...

    WPF日期时间控件

    总结一下,WPF日期时间控件是UI设计中常用的一种元素,它提供了一种直观的方式来获取和显示日期和时间。通过自定义格式,我们可以确保日期时间的显示符合项目需求。在实际开发中,结合`DateTimePicker.xaml`和`...

    WPF分页控件

    1. **数据加载优化**:分页控件只加载当前页的数据,而不是一次性加载所有数据,这样可以减少内存占用和提高应用程序的响应速度。 2. **导航控制**:提供向前、向后、跳转到第一页和最后一页的按钮,方便用户在不同...

    Wpf TreeView控件路径下显示文件和文件夹

    总结起来,实现“Wpf TreeView控件路径下显示文件和文件夹”涉及了WPF的数据绑定、模板设计、文件系统操作以及用户体验优化等多个方面。通过合理的设计和编码,我们可以创建一个功能强大、用户友好的文件浏览界面。

    WPF MulitCheckComboBox 多选下拉控件

    4. **选择状态的读取**:控件应该提供一种方式来获取当前选中的所有项,这对于后续的数据处理和逻辑控制至关重要。 实现这样一个控件通常会涉及到以下几个步骤: 1. **定义模板**:创建一个新的ControlTemplate,...

    wpf支持时间日期控件

    4. **样式和模板**:WPF允许自定义控件的外观,你可以通过修改`ControlTemplate`来改变`DateTimePicker`的样式,包括颜色、字体、布局等。 5. **本地化和国际化的支持**:`DateTimePicker`能够根据用户的区域设置...

    WPF 例程-窗口和控件随内容自动扩展

    在Windows Presentation Foundation(WPF)开发中,设计一个能够随内容自动扩展的窗口和控件是常见的需求。WPF提供了一种灵活的方式来实现这一功能,让界面能够自适应其内部内容的变化,从而提供更好的用户体验。本...

    wpf自定义标尺控件

    综上所述,创建一个WPF自定义标尺控件涉及的主要知识点有:WPF控件的继承和模板化、依赖属性的使用、事件处理、数据绑定以及UI交互设计。通过以上步骤,我们可以构建出一个功能完备、可自定义的标尺控件,以满足不同...

    一套好用的 wpfUI控件源码

    这套"一套好用的 wpfUI控件源码"可能包含了一系列自定义或增强的WPF控件,这些控件可能在功能、性能或外观上有所优化,以满足特定需求或提供更高级别的用户体验。源码的提供意味着你可以深入理解控件的工作原理,并...

    WPF的数据分页控件

    - **样式自定义**:DataPager控件的外观可以通过样式和模板进行自定义,以适应不同的设计需求。 5. **PagedCollectionView** PagedCollectionView是WPF中常用的实现ICollectionView的类,它提供了一种内置的分页...

    Wpf Mvvm 动态创建控件

    本篇将深入探讨如何在WPF MVVM模式下动态创建控件以及如何获取选中或设置的值。 1. **动态创建控件基础**: 在WPF中,动态创建控件通常涉及到`System.Windows.Controls`命名空间中的控件类,如TextBox、CheckBox、...

    wpf常用控件

    下面将详细介绍一些常见的WPF控件及其应用场景。 1. **按钮(Button)**:按钮是最基础的交互控件,用户点击后可触发事件,常用于执行命令或导航。 2. **文本框(TextBox)**:用于输入文本,支持单行或多行输入。可以...

    WPF TreeView控件样式

    在Windows Presentation Foundation (WPF) 中,TreeView是一个强大的控件,用于展示层次结构的数据。它允许用户通过可扩展的节点来浏览数据,这些节点可以展开或折叠,为用户提供了一种直观的方式来探索复杂的信息...

Global site tag (gtag.js) - Google Analytics