《Programming WPF》翻译 第9章 5.默认可视化

简介: 原文:《Programming WPF》翻译 第9章 5.默认可视化虽然为控件提供一个自定义外观的能力是有用的,开发者应该能够使用一个控件而不用必须提供自定义可视化。这个控件应该正好工作,当以它最直接的方式使用时。
原文: 《Programming WPF》翻译 第9章 5.默认可视化

虽然为控件提供一个自定义外观的能力是有用的,开发者应该能够使用一个控件而不用必须提供自定义可视化。这个控件应该正好工作,当以它最直接的方式使用时。这意味着控件应该提供一组默认的值。

这些默认的可视化存储在组件的二进制资源中,使用的源文件为theme"generic.xaml。如果你在Visual Studio 2005中创建了一个WPF 控件库的工程,这将自动添加这个文件到你的工程中,并且设置它的Build Action为作为资源内嵌。(参见第6章获取更多关于如何在组件中编译xaml资源的信息)

theme"generic.xaml文件中,定义一个样式,携有TargetType指定你的控件。这个样式应该通过一个ControlTemplate标签设置Template属性,为你的控件定义了默认可视化,正如示例9-17显示的。参见第5章获取更多关于如何定义一个提供了模板的样式的信息。

示例9-17

<? Mapping XmlNamespace="Local" ClrNamespace="CustomControlLib"  ?>
< ResourceDictionary
    
xmlns ="http://schemas.microsoft.com/winfx/avalon/2005"
    xmlns:x
="http://schemas.microsoft.com/winfx/xaml/2005"
    xmlns:local
="Local"
    
>
    
< Style  TargetType =" {x:Type local:MyCustomControl} " >
        
< Setter  Property ="Template" >
            
< Setter.Value >
                
< ControlTemplate  TargetType =" {x:Type local:MyCustomControl} " >
                    
< Border  Background =" {TemplateBinding Background} "
                            BorderBrush
=" {TemplateBinding BorderBrush} "
                            BorderThickness
=" {TemplateBinding BorderThickness} " >
                        
< ContentPresenter  />
                    
</ Border >
                
</ ControlTemplate >
            
</ Setter.Value >
        
</ Setter >
    
</ Style >
</ ResourceDictionary >

为了确定你的控件获取了默认的主体,你需要让依赖属性系统知道样式所在。如果你不这么做,你只能为你选择的基类获得默认值。示例

9-18 显示了如何这么做。

示例9-18

public   class  MyCustomControl : ContentControl  {
    
static MyCustomControl( ) {
        ThemeStyleKeyProperty.OverrideMetadata(
typeof(MyCustomControl),
                 
new FrameworkPropertyMetadata(typeof(MyCustomControl)));
    }

    
}


注意到

Visual Studio 2005 为你自动生成这段代码,当你添加一个新的自定义控件到你的控件库的工程中。


目录
相关文章
|
1月前
|
文字识别 C# 开发者
WPF开源的一款免费、开箱即用的翻译、OCR工具
WPF开源的一款免费、开箱即用的翻译、OCR工具
|
C#
【msdn wpf forum翻译】如何在wpf程序(程序激活时)中捕获所有的键盘输入,而不管哪个元素获得焦点?
原文:【msdn wpf forum翻译】如何在wpf程序(程序激活时)中捕获所有的键盘输入,而不管哪个元素获得焦点?原文链接:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/cf884a91-c135-447d-b16b-214d2d9e9972 有时有些特殊的程序需要这样处理。
950 0
|
C#
【msdn wpf forum翻译】获取当前窗口焦点所在的元素
原文:【msdn wpf forum翻译】获取当前窗口焦点所在的元素原文地址: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/6bd7a03a-f0b4-42df-a7f2-5182cf003cb0 Bialgous回答:IInputElement focusedElement = FocusManager.
935 0
|
C#
【msdn wpf forum翻译】TextBlock等类型的默认样式(implicit style)为何有时不起作用?
原文:【msdn wpf forum翻译】TextBlock等类型的默认样式(implicit style)为何有时不起作用?原文链接:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/148e95c6-6fb5-4399-8a56-4...
945 0
|
C#
【msdn wpf forum翻译】TextBox中文本 中对齐 的方法
原文:【msdn wpf forum翻译】TextBox中文本 中对齐 的方法原文链接:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/49864e35-1dbf-4292-a361-93f1a8400558 问题:TextBox中文本中对齐,使用 TextBox.HorizontalContentAlignment="Center"行不通(TextBox.VerticalContentAlignment="Center"则会起到预期的作用。
1196 0
|
C#
《Programming WPF》翻译 目录
原文:《Programming WPF》翻译 目录 注:第1、2章我只做了笔记,没有翻译,请大家阅读时注意。 还有就是,这本书的英文版本下载:[O'Reilly] Programming Windows Presentation Foundation (2005) - BBL 以下是这本书的目录: 1.
1004 0
|
C# 前端开发 API
《Programming WPF》翻译 第3章 1.什么是控件
原文:《Programming WPF》翻译 第3章 1.什么是控件 对于一个应用程序而言,控件是搭建用户界面的积木。它们具备交互式的特征,例如文本框、按钮以及列表框。尽管如此,WPF还有点不寻常,在于其并不直接地依赖其外观。
789 0
|
数据可视化 前端开发 .NET
《Programming WPF》翻译 第3章 2.处理输入
原文:《Programming WPF》翻译 第3章 2.处理输入 在Windows应用程序中,又3种基本的用户输入形式:鼠标、键盘和手写板。同时,还有一种更高级输入方式,其可能来自快捷键、工具栏的按钮、菜单项。
1155 0
|
数据可视化 C# 数据安全/隐私保护
《Programming WPF》翻译 第3章 3.内嵌控件
原文:《Programming WPF》翻译 第3章 3.内嵌控件 WPF提供了一系列内嵌控件。其中大多数符合标准的你已经熟悉的Windows控件类型。注意到没有一个是包装在旧的Win32控件外面的控件。
1295 0