原文:WPF把CheckBox的文字放到左边,开关在右边

效果

实现

这篇文章给了一个不错的参考方案.

http://www.codeproject.com/Articles/19141/WPF-Checkbox-Text-On-Left-Side

但是因为只是想把开关文字换一个位置,我觉得应该有CheckBox默认的模板再稍作修改就可以了.而且上面那个文章的方案在对其上面和原来的CheckBox有所不同.

所以我去看了一下CheckBox默认的模板.以下是和今天内容相关的部分.

  1. <Setter Property="Control.Template">
  2. <Setter.Value>
  3. <ControlTemplate TargetType="CheckBox">
  4. <BulletDecorator Background="#00FFFFFF" SnapsToDevicePixels="True">
  5. <BulletDecorator.Bullet>
  6. <mwt:BulletChrome Background="{TemplateBinding Panel.Background}" BorderBrush="{TemplateBinding Border.BorderBrush}" RenderMouseOver="{TemplateBinding UIElement.IsMouseOver}" RenderPressed="{TemplateBinding ButtonBase.IsPressed}" IsChecked="{TemplateBinding ToggleButton.IsChecked}" />
  7. </BulletDecorator.Bullet>
  8. <ContentPresenter RecognizesAccessKey="True" Content="{TemplateBinding ContentControl.Content}" ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}" ContentStringFormat="{TemplateBinding ContentControl.ContentStringFormat}" Margin="{TemplateBinding Control.Padding}" HorizontalAlignment="{TemplateBinding Control.HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding Control.VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" />
  9. </BulletDecorator>
  10. </ControlTemplate>
  11. </Setter.Value>
  12. </Setter>

这里有一个很重要的类就是BulletDecorator,这是一个Decorator元素,它具有两个内容属性: Bullet 和 Child。 Bullet 属性定义用作项目符号的 UIElement。 Child 属性定义以可视化方式与该项目符号对齐的 UIElement。 也就是两个东西,左边的是Bullet右边的那个是Child.他们会自动对齐.所以解决方案就是把Bullet和Child的内容对换一下就好了.这里需要注意的是,BulletChrome是在clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero的程序集中.所以项目需要添加PresentationFramework.Aero.dll的引用,这个文件在C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0下面.而且需要在XAML文档中声明.

下面给我修改后的源文件.

  1. <Window x:Class="TreeAndCheckBox.MainWindow"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"
  5. Title="MainWindow" Height="350" Width="525">
  6. <Window.Resources>
  7. <ResourceDictionary>
  8. <Style TargetType="{x:Type CheckBox}">
  9. <Setter Property="Template">
  10. <Setter.Value>
  11. <ControlTemplate TargetType="{x:Type CheckBox}">
  12. <BulletDecorator SnapsToDevicePixels="True" Background="#00FFFFFF">
  13. <BulletDecorator.Bullet>
  14. <ContentPresenter
  15. SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}"
  16. Margin="{TemplateBinding Control.Padding}"
  17. VerticalAlignment="{TemplateBinding Control.VerticalContentAlignment}"
  18. HorizontalAlignment="{TemplateBinding Control.HorizontalContentAlignment}"
  19. ContentStringFormat="{TemplateBinding ContentControl.ContentStringFormat}"
  20. ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}"
  21. Content="{TemplateBinding ContentControl.Content}"
  22. RecognizesAccessKey="True"/>
  23. </BulletDecorator.Bullet>
  24. <Microsoft_Windows_Themes:BulletChrome
  25. Background="{TemplateBinding Panel.Background}"
  26. IsChecked="{TemplateBinding ToggleButton.IsChecked}"
  27. RenderPressed="{TemplateBinding ButtonBase.IsPressed}"
  28. RenderMouseOver="{TemplateBinding UIElement.IsMouseOver}"
  29. BorderBrush="{TemplateBinding Border.BorderBrush}"/>
  30. </BulletDecorator>
  31. </ControlTemplate>
  32. </Setter.Value>
  33. </Setter>
  34. </Style>
  35. </ResourceDictionary>
  36. </Window.Resources>
  37.  
  38. <Grid>
  39. <CheckBox Content="测试CheckBox" HorizontalAlignment="Left" VerticalAlignment="Top" />
  40. </Grid>
  41. </Window>

WPF把CheckBox的文字放到左边,开关在右边的更多相关文章

  1. WPF笔记(2.7 文字布局)——Layout

    原文:WPF笔记(2.7 文字布局)--Layout 这一节介绍的是文字布局的几个控件:1.TextBlock      最基本的文字控件可以配置5个Font属性.TextWraping属性,&quo ...

  2. WPF:CheckBox竖向的滑块效果

    原文:WPF:CheckBox竖向的滑块效果 之前做了一个横向的滑块效果,<WPF:CheckBox滑块效果>,其实我觉得那个不好看,今天又做了一个竖向的玩. <Style Targ ...

  3. WPF系列-CheckBox

    自定义样式1 效果: 代码: <!-- CheckBox的样式 --> <Style TargetType="{x:Type CheckBox}"> < ...

  4. WPF 带CheckBox、图标的TreeView

    WPF 带CheckBox.图标的TreeView 在WPF实际项目开发的时候,经常会用到带CheckBox的TreeView,虽然微软在WPF的TreeView中没有提供该功能,但是微软在WPF中提 ...

  5. radio 和checkbox与文字对齐问题

    今天在项目中遇到radio和文字对齐问题(ie不明显,火狐和google比较明显),在此记录. 1.浏览器默认文字大小为14px,因而当文字字体为14px时radio和checkbox与文字对齐良好, ...

  6. WPF中CheckBox三种状态打勾打叉和滑动效果

    本文分为两个demo, 第一个demo实现checkBox的打叉或打勾的效果: 第二个demo部分实现checkBox的滑动效果. Demo1: wpf的CheckBox支持三种状态,但是美中不足的是 ...

  7. js文字从左边飞入效果

    贴代码之前,我们先讲一下它的原理,我们使用setInterval,让文字一开始置于屏幕看不到的位置,左右上下都可以,然后让它的位置不断移入到屏幕看得到的位置. 下面上代码: html: <h2 ...

  8. WPF 中的三维文字[转贴]

    原文:WPF 中的三维文字[转贴] 原文: http://msdn.microsoft.com/msdnmag/issues/07/10/Foundations/default.aspx?loc=zh ...

  9. checkbox与文字对齐

    checkbox和后面的文字如果不加样式,会导致checkbox和文字对齐,解决办法是对checkbox和文字同时添加如下样式: vertical-align:middle;

随机推荐

  1. Java Android 32位16位 MD5加密

    // md5加密 32位小写 private String Md5(String sourceStr) { String result = ""; try { MessageDig ...

  2. C语言 宏的定义

    #include <stdio.h> // NUM叫做宏名 // 6是用来替换宏名的字符串 #define NUM 6 #define mul(a, b) ((a)*(b)) void t ...

  3. 【洛谷5309】[Ynoi2012] D1T1(分块)

    点此看题面 大致题意: 两种操作,区间求和,将形如\(ax+y\)的位置的元素值加\(z\). 分块 这种题目显然就是按照\(x\)与\(\sqrt n\)的大小关系来分块. 对于\(x>\sq ...

  4. 什么是React中的组件

    组件就是页面上的一部分.如图,左边是一个网页.右边是对应的一个组件图.我们可以把一个大的网页拆分成很多小的部分.比如标题部分,对应一个组件,就是标题组件.搜索部分,对应的组件就是搜索组件.而这个搜索组 ...

  5. java反射 反射构造函数 报 wrong number of arguments 错误

    package com; import java.lang.reflect.Constructor; public class Person { public Person() { } public ...

  6. Javascript中==和===的区别

     一.JavaScript"=="的作用 1.当==两边的内容是字符串时,则比较字符串的内容是否相等. 2.当==两边的内容是数字时,则比较数字的大小是否相等. 3.当==两边的内 ...

  7. javascript对字符串的常见操作trim,ltrim,rtrim,isEmpty,isFloat等

    1.验证字符串是否为空格.是否包含非法字符. //验证是否字符串有非法字符 function v_invalide_char(value,msg){ var arr = ['#','@','!','$ ...

  8. TridentState分析

    public class TridentState { TridentTopology _topology; Node _node; protected TridentState(TridentTop ...

  9. LeetCode12.整数转罗马数字 JavaScript

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并 ...

  10. vue 修改框架less变量

    以vant框架为例,vue项目以less作为css处理器: less/var-reset.less @import '~vant/lib/index.less'; // Color variables ...