您当前的位置: 首页 >  c#

Jave.Lin

暂无认证

  • 2浏览

    0关注

    704博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C# WPF 相关

Jave.Lin 发布时间:2013-08-27 10:06:22 ,浏览量:2

还是那句话:学习微软的东西,自学就得了;不过比较费劲而已;

学会:Google 别人的示例、经验;还有:MSDN的文档查阅;

MSDN WPF技术资源库URL:http://msdn.microsoft.com/zh-cn/library/ms754130.aspx

1)、WPF,中如何加载一个.xaml文件,并转为:Window对象实例:

加载、解析XAML
WPF的运行时XMAL解析器公开两个类:
System.Windows.Markup下的:XamlReader、XamlWriter;
XamlReader.Load();
XamlWriter.Save();

Load:
//假设有一文件:MyWindow.xaml
Window window = null;
using (FileStream fs = new FileSteam("MyWindow.xaml", FileMode.Open, FileAccess.Read))
{
	//获得根元素,该元素是一个Window对象
	window = (Window)XmalReader.Load(fs);
}
//根据元素名称来查找元素对象
//如:以上的MyWindow.xaml文件中,有定义一个按钮为:
OK
//那么就可以通过window的FindName方法来获取元素对象Button okButton = (Button)window.FindName("okButton")  
//FindName是继承自FrameworkElement 类的,MSDN文档介绍该类:  
//http://msdn.microsoft.com/zh-cn/library/system.windows.frameworkelement.aspx

Save:
string xamlStr = XamlWriter.Save(window);
[继续在写...]   
2)、分别需要了解,WPF目前提供的一般常用的布局控件:

都在:System.Windows.Controls命名空间低下的:

Canvas(画布)、DockPanel(停靠布局)、Grid(表格)、StackPanel(堆栈布局)、VirtualizingPanel(虚堆栈布局)、WrapPanel(覆盖布局)

Grid(表格):http://wenku.baidu.com/view/5e483b0dba1aa8114431d99b.html

3)、在学习WPF过程中,发现有个挺好用的工具:Xaml浏览工具:XamlPad

使用效果图:

4)、Grid 布局控件的简单使用

xaml源码:


    
        
            
            
            
            
            
            
        
        
            
            
            
            
        
        VerticalAlignment Sample
        Button 1 (Top)
        Button 2 (Botton)
        Button 3 (Center)
        Button 4 (Stretch)
        Button 5 (Stretch)
    

效果图:

5)、DockPanel 的布局:

xaml源码:


    
        
            
            
        
        
        
        
    
效果图:

在选择,DockPanel还是StackPanel的选择,可以看看MSDN的一篇文章:

http://msdn.microsoft.com/zh-cn/library/vstudio/ms754213.aspx

从中,我们可以看到,DockPanel会影响内部子元素的尺寸大小;而StackPanel则不会,而是对子元素的显示进行裁剪;

执行效果图:

6)、Binding(可视元素与数据的绑定):

Binding的介绍,这博客里介绍得还挺详细:

http://blog.csdn.net/iamsupercola/article/details/7041996

xaml源码:


    
        
            
            
        
        
        
        
    



效果图:(Slider's Value标签右边的文本框的Text属性值,与最下面的Slider控件的Value属性值都分别Binding了数据)

7)、不规则窗体

需要用到:Microsoft Expression Studio

可以在这里找到破解版的来使用:Expression Studio 4 破解

http://www.silverlightchina.net/html/study/WPF/2012/0624/16902.html

http://www.cnblogs.com/SkyD/archive/2008/07/13/1242044.html

8)、WPF命令:

使用WPF的命令制机,制作一些简单的命令监听,并制作成命令历史记录,并实现,类似:撤消(Undo)的功能;

测试源码项目为:MonitorCommands

9)、WPF 自定义数据转换器,官方的介绍:

http://msdn.microsoft.com/zh-cn/library/aa970913.aspx

10)、WPF 样式、触发器:

StyleTriggersSetterTestingProject

11)、WPF 实现九宫格位置拉伸:

http://www.silverlightchina.net/html/study/WPF/2012/1215/20850.html

12)、Path.Data在xaml中的各种赋值,值写法:

http://www.silverlightchina.net/html/study/WPF/2011/0116/4927.html

也可以在代码这么写成字符串,再使用:GemotryConvertor对象去转换;

13)、WPF中,如何对一个可象对象栅格化:

CodeProject的DEMO,非常有用,我把他下载,保存到网盘,以便哪天,源网站把相关资源删除。

BitmapSample.zip

http://www.codeproject.com/Articles/103184/How-to-Render-Bitmap-or-to-Print-a-Visual-in-WPF#

14)、关于Adorner的一个详细介绍文章:

用于制作,Tips,或是普通元素上层显示的提示信息,挺有用;

http://www.cnblogs.com/loveis715/archive/2012/03/31/2427734.html

15)、Drag and Drog Swap Items(拖动、拖拽,实现,子项之间的效换效果):

我存到网盘了:在CodeProject下你还得注册帐号;下我这个免了这流程,呵呵:

ListViewDragDropManager_src.zip

http://www.codeproject.com/Articles/17266/Drag-and-Drop-Items-in-a-WPF-ListView

16)、CaptureMouse与ReleaseMouseCapture的作用:

http://www.cnblogs.com/xwlyun/archive/2012/09/12/2681585.html

17)、自定义Expander控件:

不多说,CodeProject的总是精品:

http://www.codeproject.com/Articles/248112/Templating-WPF-Expander-Control

18)、国外WPF Mahapps.metro开源项目,很吊的项目:

首页:http://mahapps.com/MahApps.Metro/# 开源Github:https://github.com/MahApps/MahApps.Metro

19)、另一个比较轻量级开源项目的:

首页:http://mui.codeplex.com/

同时提供了一些免费xaml矢量图标(icon)非常赞!

图标提供地址:http://modernuiicons.com/

20)、WPF 国外视频网:Youtube教程:

MVVM_DEMO_PR1

MVVM_DEMO_PR2

其中看了一篇MVVM的教程,我自己重新写了一个DEMO:MVVM_Demo

21)、MSDN、CNBLOG的一些ICommand使用扩展中UI上的DEMO:

MSDN:http://msdn.microsoft.com/zh-cn/library/system.windows.input.icommandsource.command.aspx

CNBLOG:http://www.cnblogs.com/xiwang/archive/2012/07/23/2604924.html

22)、WPF 文本(TextBlock)描边:

1、转为WriteableBitmap再对像素点设置颜色,虽然不是最好的方法,但是思路不错:

http://www.cnblogs.com/webgames/archive/2010/09/18/1829814.html

2、shader 描边,也是非常不错的一个,不过这个是SL的:

http://www.cnblogs.com/ashei/archive/2011/02/12/1952243.html

3、还有另一个,思路非常值得推荐,CodeProject下的,文本描边的各种风格,Cool得要命:

http://www.codeproject.com/Articles/42529/Outline-Text

4、描边的好几种方法:(CSDN的:野比,把第1、2、3点也包括中内,非常不错的总结!)

http://bbs.csdn.net/topics/390070159

23)、WPF 的HLSL(WPF Pixel Shader : PS)学习:

有一个介绍相关的国外网站,有DEMO,与视频介绍,还有:文档:

信息介绍:

http://channel9.msdn.com/shows/Continuum/WPFFXDemo/

视频介绍:

http://channel9.msdn.com/shows/Continuum/WPFFXDemo/

文档:

https://skydrive.live.com/?cid=123ec1ed6c72a14a&id=123EC1ED6C72A14A%21169

还要把相关文档下载下来了:

doc1 doc2

24、如何获取:DataTemplate的指定元素:

如:xaml模板内有这定的定义:


	
		
			
				
					
				
			
		
	
在.cs代码内,如何获取这个x:Name="Eyes"的元素呢:

var listViewItem = (_listView.ItemContainerGenerator.ContainerFromIndex(i)) as ListViewItem; // i 这第i行对应的ListViewItem的索引

DesignerLayerOptionMenu textBox = listViewItem.FindVisualDescendant("Eyes");

//而这个FindVisualDescendant方法是扩展方法:我在stackoverflow社区找到的其一贴子的代码
/// 
/// stackoverflow:
/// http://stackoverflow.com/questions/1298274/c-wpf-get-binding-path-of-an-element-in-a-datatemplate
/// 
public static class ControlAux
{
	static public IEnumerable GetVisualDescendants(this DependencyObject item) where T : DependencyObject
	{
		for (int i = 0; i < VisualTreeHelper.GetChildrenCount(item); ++i)
		{
			DependencyObject child = VisualTreeHelper.GetChild(item, i);
			if (typeof(T) == (child.GetType()))
			{
				yield return (T)child;
			}
			foreach (T descendant in GetVisualDescendants(child))
			{
				yield return descendant;
			}
		}
	}
	static public T FindVisualDescendant(this DependencyObject item, string descendantName) where T : DependencyObject
	{
		return
			GetVisualDescendants(item).Where(
			descendant =>
			{
				var frameworkElement = descendant as FrameworkElement;
				return frameworkElement != null && frameworkElement.Name == descendantName;
			}).
			FirstOrDefault();
	}
}
关注
打赏
1664331872
查看更多评论
立即登录/注册

微信扫码登录

0.0441s