WPF 控件模板_苏守坤的博客-程序员宅基地

技术标签: WPF  

扣扣技术交流群:460189483 

引言:在进行WPF项目开发过程中,由于项目的需要,经常要对某个控件进行特殊的设定,其中就牵涉到模板的相关方面的内容。本文也是在自己进行项目开发过程中遇到控件模板设定时集中搜集资料后整理出来的,以供在以后的项目开发过程中查阅。WPF有控件模板和数据模板,从字面上来看,控件模板主要是用来改变控件的外观,数据模板则定义控件中数据的表现方式。下面让逐一进行介绍。

 

控件模板ControlTemplate,有两部分:VistualTree视觉树,即是能看到的外观;Trigger触发器,里面包括外部条件达到某一条件下会引起的响应。

参考代码:

<Button Content="Button" Grid.Row="1" Height="136" HorizontalAlignment="Left" Margin="114,80,0,0" Name="button1" VerticalAlignment="Top" Width="205" >
            <Button.Template >
                <ControlTemplate >
                    <Grid >
                        <Ellipse Name="faceEllipse" Height="50" Width="100" Fill="{TemplateBinding Button.Background}"/>
                        <TextBlock Name="txtBlock"  />
                    </Grid >
                    <ControlTemplate.Triggers >
                        <Trigger Property="Button.IsMouseOver" Value="True">
                            <Setter Property="Button.Background" Value="blue"/>
                        </Trigger >
                    </ControlTemplate.Triggers >
                </ControlTemplate >
            </Button.Template >
        </Button >

在上面的前台代码中,包含button控件的视觉树和触发器。Grid部分是改变button控件的视觉树部分,意思是将button控件显示部分椭圆,而背景色是控件的原本色调;Triggers部分是当有鼠标在button控件上面是控件的背景色变为蓝色。

 

为了便于多次利用,可以将其写入模板中,如下:

<Window.Resources >
        <ControlTemplate x:Key="buttonTemplate" TargetType="Button" >
            <Grid >
                <Ellipse Name="faceEllipse" Height="50" Width="100" Fill="{TemplateBinding Button.Background}"/>
                <TextBlock Name="txtBlock"  />
            </Grid >
            <ControlTemplate.Triggers >
                <Trigger Property="Button.IsMouseOver" Value="True">
                    <Setter Property="Button.Background" Value="blue"/>
                </Trigger >
            </ControlTemplate.Triggers >
        </ControlTemplate >
    </Window.Resources >

调用时:<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="216,224,0,0" Name="button3"  Width="75" Template="{StaticResource buttonTemplate}"/>

 

 

DataTemplate模板:

参考代码:

<ListBox Height="202" HorizontalAlignment="Left" Margin="21,12,0,0" Name="listBox1" VerticalAlignment="Top" Width="384" >
            <ListBox.ItemTemplate >
                <DataTemplate >
                    <StackPanel Orientation="Horizontal" >
                        <TextBox Width="60" Text="{Binding Path=Name}"/>
                        <TextBox Width="60" Text="{Binding Path=ID}"/>
                        <TextBox Width="60" Text="{Binding Path=Age}"/>
                    </StackPanel >
                </DataTemplate >
            </ListBox.ItemTemplate >
        </ListBox >

上例是将listbox作为实例来做展示,在一个listbox控件中为了显示多行和多列数据,使用ItemTemplate进行构造。

 

 

 

WPF中的style:style,样式风格的意思,简单来说就是对属性值的批处理,在实际使用过程中帮助非常大。

参考代码:

<Window.Resources >
        <ResourceDictionary >
            <Style x:Key="dgButton" TargetType="Button" >
                <Setter Property="Background" Value="Blue" />
                <Setter Property="FontSize" Value="20"/>
            </Style >
            <Style x:Key="cb" TargetType="CheckBox" >
                <Style.Triggers >
                    <Trigger Property="IsChecked" Value="True">
                        <Setter Property="FontSize" Value=" 40"/>
                        <Setter Property="Foreground" Value="Red" />
                    </Trigger >
                </Style.Triggers >
            </Style >
        </ResourceDictionary >
    </Window.Resources >

调用方式:

<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="216,224,0,0" Name="button3" VerticalAlignment="Top" Width="75" Style ="{StaticResource dgbutton}"/>

<CheckBox Content="CheckBox" Height="58" HorizontalAlignment="Left" Margin="654,16,0,0" Name="checkBox1" VerticalAlignment="Top" Width="175" Style="{StaticResource cb}" Grid.Row="1" />

 

上述代码有两个组成部分:

1 设置button的的背景色和字体大小,说到底也是对button的属性进行批量处理。当然在实际使用button控件时也可单独使用,此处只是便于处理。

2 设置checkbox的触发器,当对check进行选择是,字体和背景色都会做出改变。

 

总结:在项目开发过程中,经常使用的也就是这些了,如果有更为特殊需求,那就需要另外寻求方案处理了。

 

 

add in 2014\9\10

做WPF项目,在界面排版时,往往因为分辨率的不同而导致这样那样的问题,此处添加一个框架,适应于不同的分辨率的开发机。

<DockPanel Name="DockPanel1" LastChildFill="True">
<Viewbox Name="Viewbox1" Stretch="Fill">
<Canvas Height="1080" Name="Canvas1" Width="1920">
<Grid Canvas.Left="0" Canvas.Top="0" Height="1080" Width="1920">


</Grid>
</Canvas>
</Viewbox>
</DockPanel>

虽然简单却非常实用。

 

 

add in 2014\11\11

wpf控件引用UI设计好的样式:

<Button Content="Button" Margin="0,8,8,0" VerticalAlignment="Top" Style="{DynamicResource closeButtonStyle}" Height="17.598"  Width="17.598" Click="Button_Click" />

在界面中必需添加引用:

<Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/StyleLibrary;component/ResourceDictionary.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Window.Resources>

因为界面是window界面,所以是Window.Resource,如果是page则Page.Resources。

 

如何使引用的其他项目中的控件资源,则应该在App.xaml中添加例如:

<Application.Resources>
        <ResourceDictionary >
            <ResourceDictionary.MergedDictionaries >
                <ResourceDictionary Source="/MonitorStyleLibrary;component/ResourceDictionary1.xaml"></ResourceDictionary>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>

项目中的控件直接引用资源名称即可:

<Button Content="登录" Height="245" Style="{StaticResource logobtn}" HorizontalAlignment="Left" Margin="771,445,0,0" Name="btnLogin" Width="288" FontSize="40" Click="btnLogin_Click" />

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014453443/article/details/89710412

智能推荐

北京理工大学金旭亮老师C#(78—EmbedException)_weixin_42681308的博客-程序员宅基地

CLR“两轮遍历”的多层嵌套异常捕获处理流程try try try 在此书写测试代码 catch Exception A finally catch ExceptionB finallycatch ExceptionCcatch Exceptionfinally“扫描并查找相匹...

db2与oracle 使用差异_iteye_15105的博客-程序员宅基地

1、取前N条记录Oracle:Select * from TableName where rownum &amp;lt;= N;DB2:Select * from TableName fetch first N rows only;2、取得系统日期Oracle:Select sysdate from dual;DB2:Select current timestamp from sy...

WPF DevExpress Chart控件 界面绑定数据源,不通过C#代码进行绑定_weixin_34034670的博客-程序员宅基地

 &amp;lt;Grid x:Name=&quot;myGrid&quot; Loaded=&quot;Grid_Loaded&quot; DataContext=&quot;{Binding PartOneData}&quot;&amp;gt; &amp;lt;dxc:ChartControl Name=&quot;chartControl1&quot; DataSource=&quot;{Binding ComplainAnalysisList}&quot;&amp;gt;

linux查询默认权限命令,『无欲则无求』Linux常用命令 — 24、umask默认权限_weixin_39948824的博客-程序员宅基地

文章目录1、文件和目录的默认权限2、umask 默认权限(1)查看系统的umask权限(2)用八进制数值显示umask权限(3)umask权限的计算方法(4)注意:umask 默认权限的计算绝不是数字直接相减。总结:1、文件和目录的默认权限Linux系统的基本权限有6种。读写执行为基本权限umask 为默认权限后边还有4种权限,会在之后的权限管理部分详细讲解。我们先创建一个文件abc,然后查看ab...

《两日算法系列》之第五篇:SVM_小一的学习笔记的博客-程序员宅基地

1. 支持向量机理论支持向量机(Support Vector Machine:SVM)支持向量机的目的是什么?利用训练数据集的间隔最大化找到一个最优分离超平面你可能有两个名词不太懂,间隔?分离超平面?别紧张,没有人刚开始学习SVM的时候就知道这两个东西先来看个例子,现在有一些人的身高和体重数据,将它们绘制成散点图,是这样的:如果现在给你一个未知男女的身高和体重,你能分辨出性别吗?...

细说双 11 直播背后的压测保障技术_阿里云技术的博客-程序员宅基地

“今年 1 月到现在,淘宝直播的用户超过了 5 亿,到 8 月份流量也增长了 59%,在最核心的商家 GMV 上增长了 55%。双 11 是从 10 月 20 日晚开始的,我们希望淘宝直播作为主场去承接这件事情。”日前,淘宝事业群直播事业部负责人程道放在接受 21 世纪经济报道记者采访时透露,过去一年的直播可谓热闹,今年会更加专业化。如此大的用户体量下,直播类应用给后端服务带来了一些什么不一样的挑战呢?我们今天来介绍一些直播的架构,以及针对这个架构,给我们的应用架构带来的挑战。直播的架构我们

随便推点

有限状态机报错transition is invalid while previous transition is still in progress_烟雨星空的博客-程序员宅基地

在这之前,先来说下什么是有限状态机(Finite-state machine)背景我们在开发游戏,比如rpg游戏时,会涉及到玩家有各种状态,如攻击状态,等待状态等,如果用ifelse也可以实现,但是随着程序复杂度越来越高,这样肯定是不易于代码维护的,很容易出错,而且代码可读性比较差。这时,用状态机就可以很好的解决这些问题。我们可以通过状态机来记录它的各个状态(state)和状态之间的转换(tr...

mysql分组多个数据计算_一小步一大步的博客-程序员宅基地_mysql分组减法

当需要我们做分组并计算每组中的数据时,可以把查询的结果作为一个表,然后再进行运算。表aidcnameclass1000a11001b21002c3表bidsnameagecid2000小红1210002001小白

防空系统效能评估软件攻略_软件胃信pp637521的博客-程序员宅基地

防空系统效能评估软件防空系统效能评估软件是为解决武器装备效能评估问题新研发的一款软件,防空系统效能评估软件用于武器装备论证、研制、试验、使用等不同阶段的效能评估,防空系统效能评估软件为作战体系、装备体系评价和优化提供定量依据。装备系统效能评估分析软件能够使用仿真、靶试、演习等多种来源的实验数据,将效能评估贯穿武器装备全生命周期。1防空系统效能评估软件介绍2、互联网是个神奇的大网,大数据开发和...

Expressions and phases for writing_zhaoyawei09的博客-程序员宅基地

Remarks for English expressionslags behind, with respect toit lags behind its non-stochastic counterparts with respect to the convergence rate.mitigate, shortcomingSVRG mitigates this shortcoming.invol

python测试框架 pytest_weixin_30457465的博客-程序员宅基地

一:pytest 是python的一套全功能的测试框架. 优点如下:1、操作简单,支持多组数据参数化, 支持用例的skip和xfail;2、支持简单的单元测试和复杂的功能测试,还可以做UI和接口自动化测试;3、pytest有很多第三方的插件并且支持定义扩展; 如失败重新执行, 断言失败也继续运行,自定义出错停止, 自定义mark标记灵活运行用例....4、可以很好的集...

电脑免驱 乐得瑞LDR2001 USB转串口芯片方案介绍_Legendary_008的博客-程序员宅基地

电脑免驱 乐得瑞LDR2001 USB转串口芯片方案介绍1 概述 LDR2001 芯片是乐得瑞科技设计的一个免驱的 USB 转串口的 CDC 类芯片,可以实现USB 转串口和 Billboard 的功能。当使用了 LDR2001 芯片的设备接入 USB HOST 时,会在HOST 端弹出 Billboard 窗口,提醒用户该设备所具有的 Alternate Mode 功能。电脑直接免驱动使用2 特点◆ 全速 USB 设备接口,支持 1.1 以上版本,Billboard 支持 USB2.01 以上的版