zoukankan      html  css  js  c++  java
  • 《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为你自动生成这段代码,当你添加一个新的自定义控件到你的控件库的工程中。


  • 相关阅读:
    sqlplus时报Linux-x86_64 Error: 13: Permission denied
    thrift之TTransport层的缓存传输类TBufferedTransport和缓冲基类TBufferBase
    Java实现 蓝桥杯 算法提高 新建Microsoft world文档
    Java实现 蓝桥杯 算法提高 新建Microsoft world文档
    Java实现 蓝桥杯 算法提高 快乐司机
    Java实现 蓝桥杯 算法提高 快乐司机
    Java实现 蓝桥杯 算法提高 队列操作
    Java实现 蓝桥杯 算法提高 队列操作
    Java实现 蓝桥杯 算法提高 文本加密
    Java实现 蓝桥杯 算法提高 合并石子
  • 原文地址:https://www.cnblogs.com/Jax/p/1136962.html
Copyright © 2011-2022 走看看