使用代码浏览WPF控件模版
纯代码创建,不需要创建界面,创建WPF工程后,直接复制代码就可以使用。
当你手头没有Blend,又不记得以下这段代码,但是又想浏览控件模版的时候,就可以直接复制拿来用了。
public partial class MainWindow : Window
{
ListBox lbox;
TextBox tbox;
Grid grid;
public MainWindow()
{
InitializeComponent();
InitializeControl();
LoadControlTemplate(); } /// <summary>
/// 创建界面
/// </summary>
private void InitializeControl()
{
grid = new Grid();
ColumnDefinition col1 = new ColumnDefinition();
ColumnDefinition col2 = new ColumnDefinition();
col1.Width = GridLength.Auto;
grid.ColumnDefinitions.Add(col1);
grid.ColumnDefinitions.Add(col2); //List
lbox = new ListBox();
lbox.SelectionChanged += (a, b) => { ShowControlTemplate(); };
//TextBox
tbox = new TextBox();
tbox.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
tbox.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto; grid.Children.Add(lbox);
grid.Children.Add(tbox); Grid.SetColumn(lbox, );
Grid.SetColumn(tbox, ); this.Content = grid;
} private void LoadControlTemplate()
{
Type type = typeof(System.Windows.Controls.Control);
List<Type> controlType = new List<Type>();
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetAssembly(typeof(System.Windows.Controls.Control)); foreach (Type item in assembly.GetTypes())
{
if (item.IsSubclassOf(type) && !item.IsAbstract && item.IsPublic)
{
controlType.Add(item);
}
}
lbox.ItemsSource = controlType;
} private void ShowControlTemplate()
{
try
{
Type type = (Type)lbox.SelectedItem;
System.Reflection.ConstructorInfo info = type.GetConstructor(Type.EmptyTypes);
Control control = (Control)info.Invoke(null);
control.Visibility = Visibility.Collapsed;
grid.Children.Add(control);
ControlTemplate template = control.Template; System.Xml.XmlWriterSettings setting = new System.Xml.XmlWriterSettings();
setting.Indent = true;
StringBuilder sb = new StringBuilder();
System.Xml.XmlWriter writer = System.Xml.XmlWriter.Create(sb, setting);
System.Windows.Markup.XamlWriter.Save(template, writer);
tbox.Text = sb.ToString();
grid.Children.Remove(control); }
catch (Exception ex)
{
tbox.Text = ex.Message;
}
}
}
截图:

使用代码浏览WPF控件模版的更多相关文章
- 如何通过代码设置WPF控件的字体,颜色
this.lbTips.Foreground = new SolidColorBrush(Colors.Black); this.lbTips.FontFamily = new FontFamily( ...
- 解决 CefSharp WPF控件不能使用输入法输入中文的问题(代码已提交到 github)
首先,本文所有 代码已经提交到github,需要的可以直接从github获取:https://github.com/starts2000/CefSharp,希望可以帮助到有需要的朋友们. CEF 简介 ...
- c#字符串加载wpf控件模板代码 - 简书
原文:c#字符串加载wpf控件模板代码 - 简书 ResourceManager resManagerA = new ResourceManager("cn.qssq666.Properti ...
- 《Dotnet9》系列-开源C# WPF控件库3《HandyControl》强力推荐
大家好,我是Dotnet9小编,一个从事dotnet开发8年+的程序员.我最近开始写dotnet分享文章,希望能让更多人看到dotnet的发展,了解更多dotnet技术,帮助dotnet程序员应用do ...
- 如何封装属于自己的WPF控件库
在网上找了一下,发现这方面的资料并不多.做传统桌面的本来就不多了吧,更别说WPF了.我可能也要另寻出路了,不过我还是觉得做桌面挺有意思的. 言归正传 首先,新建一个WPF自定义控件库项目 这里我们封 ...
- 浅尝辄止——使用ActiveX装载WPF控件
1 引言 使用VC编写的容器类编辑器,很多都可以挂接ActiveX控件,因为基于COM的ActiveX控件不仅封装性不错,还可以显示一些不错的界面图元. 但是随着技术不断的进步,已被抛弃的Active ...
- 通过WinForm控件创建的WPF控件无法输入的问题
今天把写的一个WPF程序发布到别的机器上执行,发现一个比较奇怪的问题:在那个机器上用英文输入法无法输入数字,非要切换到中文输入法才行:但在我的机器上却是好好的. 最开始以为是输入法的问题,弄了好一阵子 ...
- WPF控件--利用Winform库中的NotifyIcon实现托盘小程序
WPF控件--NotifyIcon 运行界面如下所示: 图1 图2 代码很少,如下所示 ...
- WPF控件模板
引言:在进行WPF项目开发过程中,由于项目的需要,经常要对某个控件进行特殊的设定,其中就牵涉到模板的相关方面的内容.本文也是在自己进行项目开发过程中遇到控件模板设定时集中搜集资料后整理出来的,以供在以 ...
随机推荐
- Java 什么是静态内部类
#定义 Java语言允许在类中再定义类,这种在其它类内部定义的类就叫内部类. 有static关键字修饰的内部类. 比如:Pattern类中的Node类. public class Outer { pr ...
- TypedValue: 使用TypedValue将dip值转换成px值
之前自己一直手工编写函数来实现dip值到px值,今天无意中发现android本身就带有类似的函数来实现这种转换过程,就是 TypedValue.applyDimension public class ...
- 蓝牙BLE: GATT Profile 简介(GATT 与 GAP)
一. 引言 现在低功耗蓝牙(BLE)连接都是建立在 GATT (Generic Attribute Profile) 协议之上.GATT 是一个在蓝牙连接之上的发送和接收很短的数据段的通用规范,这些很 ...
- NonSerialized 属性忽略序列化报错'NonSerialized' is not valid on this declaration type
[XmlIgnore] [NonSerialized] public List<string> paramFiles { get; set; } //I get the following ...
- 002-guava String 操作
一.概述 提供了字符串基本操作 二.使用 2.1.字符串拼接 字符串的拼接采用的是Guava中的Joiner类中的方法 @Test public void testJdkJoin() { List&l ...
- Spring cloud微服务安全实战-3-14章节小结
认证:一个httpBasic 一个是用户名密码的认证 授权:数据库内判断的r就是读 w就是写 ,ACL 获取用户信息的这段逻辑,实际上着也是安全机制的一种.防止越权,当前只能看到自己的信息. Spri ...
- Spring Cloud微服务安全实战-1-1 课程导学
- iOS 简单实用的一些宏定义
#define WDWBaseURL @"http://192.168.1.1/" //字符串 #define TOWERTabBarItemTitleOffset UIOffs ...
- How to Plan and Configure YARN and MapReduce 2 in HDP 2.0
As part of HDP 2.0 Beta, YARN takes the resource management capabilities that were in MapReduce and ...
- bladex之nacos配置
blade.yaml #服务器配置server: undertow: # 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程 io-threa ...