WPF控件的默认样式的查看、自定义样式(含控件模板)的放置位置

(一)查看样式

WPF中常用控件都有一个默认的自定义样式,在Visual Studio中不能直接查看(???是否确实没有办法查看,如果表达不当,请见谅),但是在Blend for Visual Studio 中可以通过模板来查看。

如下所示:

(1)在左下角的“对象和时间线”面板中,找到相应的控件,右键点击打开上下文菜单,点击 编辑模板->编辑副本。

(2)选择样式的名称(关键字)和定义位置。

         在“名称(关键字)”中,如果选第一行,则样式含有自定义的x:Key属性;若选第二行,则没有key,会自动为指定Type应用样式。

在“定义位置”中,第一行“应用程序”表示样式会放到app.xaml中,第二行放到当前xaml文档中;第三行表示自定义资源字典。

(3)点击确定后就生成了相应的样式,样式中也包含ControlTemplate。这是就可以自己来更改了。

(二)自动样式的存放位置

对于只有TargetType属性而没有x:Key属性的样式,       例如 <Style TargetType="{x:Type CheckBox}">,系统将自动为所有作用域内的该类型元素应用此样式。

比如一个最简单的程序,主窗口中含有一个checkBox和一个自定义UserControl控件MyBox,在MyBox中也含有CheckBox:

<Window x:Class="WpfApp19.MainWindow"
        .........(此处省略多行)>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        
        <!--此处有一个CheckBox-->
        <CheckBox Margin="30,10" Grid.Row="1">checkbox</CheckBox>

        <!--MyBox是自定义的UserControl,其中也含有两个CheckBox-->
        <local:MyBox  Margin="30,10" Grid.Row="2"></local:MyBox>
    </Grid>
</Window>
<!--MyBox控件中含有CheckBox-->
<UserControl x:Class="WpfApp19.MyBox"
             。。。。。。。。(省略多行) >
    <StackPanel>
        <CheckBox>1</CheckBox>
        <CheckBox>2</CheckBox>
    </StackPanel>
</UserControl>

那 <Style TargetType="{x:Type CheckBox}">格式的样式文件放在哪里呢?

(1)放在app.xaml中,那么MainWindow和MyBox中的CheckBox都自动应用该样式,会覆盖掉WPF系统自身为CheckBox配置的默认样式。

(2)放在MainWindow.xaml中,那么MainWindow和MyBox中的CheckBox也都自动应用该样式,会覆盖掉WPF系统自身为CheckBox配置的默认样式。

(3)放在MyBox.xaml中,那么仅仅MyBox中的2个checkBox会使用该样式,而MainWindow.xaml中的那1个checkBox仅仅使用WPF的默认样式。

(4)如果放在单个控件内部,则仅该控件可以使用。

结论:

(i)WPF系统为其控件配置的默认样式,是具有较低的优先级的。无论在App.xaml或MainWindow.xaml还是控件自身xaml中,都可以用定制的样式来覆盖默认样式。如果在App.xaml中已经配置了样式,在下级xaml中就不需要重复配置相同的样式了,下级控件会递归向上查找相应的资源。

(ii)可以利用Blend for Visual Studio程序取得默认的样式文件,并在此基础上进行修改来定制自己需要的样式。

猜你喜欢

转载自blog.csdn.net/jiuzaizuotian2014/article/details/81774338