详解WPF中用户控件和自定义控件的使用.docx

详解WPF中用户控件和自定义控件的使用.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

详解WPF中用户控件和自定义控件的使用

get{return(object)GetValue(CommandParemeterProperty);}

set{SetValue(CommandParemeterProperty,value);}

publicstaticreadonlyDependencyPropertyCommandParemeterProperty=

DependencyProperty.Register(CommandParemeter,typeof(object),typeof(UserControl1),newPropertyMetadata(0));

使用用户控件

Windowx:...

xmlns:local=clr-namespace:WpfApp19

Title=MainWindowHeight=450Width=800

Grid

local:UserControl1value={Binding}Command={Binding}/

/Grid

/Window

自定义控件

点击添加自定义控件后,会增加一个CustomControl1.cs文件以及一个Themes目录,在该目录下有一个Generic.xaml文件,该文件就是自定义控件的style。我们经常针对某些控件进行编辑模板-创建副本的操作而产生的style,其实就是Generic.xaml中定义的style。另外,有时我们可能遇到一种情况,也就是相同的软件在不同的Windows版本下运行,表现形式可能会不同,甚至某些系统下运行不了,这就是和不同系统下的默认的Theme不同。其实wpf控件找不到自定义的样式时,会从系统获取样式,查找顺序是,先查找所在的程序集,如果程序集定义了ThemeInfo特性,那么会查看ThemeInfoDictionaryLocation的属性值,该属性如果是None则说明没有特定的主题资源,值为SourceAssembly,说明特定资源定义在程序集内部,值为ExternalAssembly则说明在外部,如果还是没有找到,则程序会在自身的themes/generic.xaml中获取,在generic.xaml中获取的其实就和系统默认样式相关。

不同xaml所对应的系统主题

按钮案例

C#文件

publicclassSwitch:ToggleButton

staticSwitch()

//通过重写Metadata,控件就会通过程序集themes文件夹下的generic.xaml来寻找系统默认样式

DefaultStyleKeyProperty.OverrideMetadata(typeof(Switch),newFrameworkPropertyMetadata(typeof(Switch)));

Themes文件夹下的Generic.xaml文件

注意在该文件中不能有中文,注释也不行

StyleTargetType={x:Typelocal:Switch}

SetterProperty=Template

Setter.Value

ControlTemplateTargetType={x:Typelocal:Switch}

Grid

Border

Name=dropdown

Width={BindingRelativeSource={RelativeSourceSelf},Path=ActualHeight}

Margin=-23

CornerRadius={BindingRelativeSource={RelativeSourceSelf},Path=ActualHeight}

Visibility=Collapsed

Border.Background

RadialGradientBrush

GradientStopOffset=1Color=Transparent/

GradientStopOffset=0.7Color=#5500D787/

GradientStopOffset=0.59Color=Transparent/

/RadialGradientBrush

/Border.Background

/Border

Border

Name=bor

Width={Bin

文档评论(0)

182****6697 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档