2018-9-28-WPF-自定义-TextBoxView-的-Margin-大小
title | author | date | CreateTime | categories |
---|---|---|---|---|
WPF 自定义 TextBoxView 的 Margin 大小
|
lindexi
|
2018-09-28 17:16:17 +0800
|
2018-09-28 16:59:57 +0800
|
WPF
|
在 WPF 的 TextBox 里有 TextBoxView 用来渲染 TextBox 内容,但是在 TextBox 里面的 TextBoxView 是不能直接设置而且默认的 Margin 是 2,0,2,0 如何自定义这个值
先来写一个简单的程序告诉大家这个问题,创建一个空白 WPF 程序,在里面添加一个 TextBox 设置 TextBox 居中
<TextBox Width="100" HorizontalAlignment="Center" VerticalAlignment="Center"> </TextBox> <TextBlock Margin="10,100,10,10" Text="欢迎访问我博客 http://lindexi.gitee.io 里面有很多 UWP 博客" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
可以看到现在的 TextBox 光标和 TextBox 的左边有 2 像素的距离,通过 Snoop 可以看到这个 TextBoxView 的 Margin 是 2,0,2,0 而且无法直接修改
从 WPF 的源代码可以看到 TextBoxView 是 internal 的也就是无法直接修改 Style 在构造函数设置了 Margin 的值,这里的 CaretElement.BidiCaretIndicatorWidth 就是 2 这就是默认的大小
最简单的解决方法是通过设置 TextBox 的 Padding 的方法
<TextBox Width="100" Padding="-2,0,-2,0" HorizontalAlignment="Center" VerticalAlignment="Center"> </TextBox>
因为在 TextBox 里面存在 TextBoxView 的偏移,使用相反的值可以让 TextBoxView 的偏移取消,这里的 Padding 需要根据自己的需要设置
如果设置 Padding 的负数比较小,如 -500
就可以在 TextBox 的外面输入
如果这里的 TextBox 不是在 ListView 或其他控件使用了 TextBox 的,可以使用自己创建的类继承 TextBox 可以通过在 Load 重写控件的 Margin 重写
public class PeedereJiyay : TextBox
{
/// <inheritdoc />
public PeedereJiyay()
{
Loaded += PeedereJiyay_Loaded;
} private void PeedereJiyay_Loaded(object sender, RoutedEventArgs e)
{
if (Template.FindName("PART_ContentHost", this) is ScrollViewer contentHost && contentHost.Content != null && contentHost.Content is FrameworkElement textBoxView)
{
// 这里解决 TextBoxView 的 Margin 不能设置
textBoxView.Margin = new Thickness(0, 0, 0, 0);
}
}
}
现在修改一下界面,在界面使用创建的 PeedereJiyay 替换原来的控件
<local:PeedereJiyay Width="100" HorizontalAlignment="Center" VerticalAlignment="Center"> </local:PeedereJiyay>
只要是单独使用文本,可以尝试继承 TextBox 的类。如果是使用其他控件,建议使用修改 Padding 的方法
c# - How to set the margin on a internal TextBoxView in wpf - Stack Overflow
2018-9-28-WPF-自定义-TextBoxView-的-Margin-大小的更多相关文章
- WPF自定义Window样式(1)
1. 引言 WPF是制作界面的一大利器.最近在做一个项目,用的就是WPF.既然使用了WPF了,那么理所当然的,需要自定义窗体样式.所使用的代码是在网上查到的,遗憾的是,整理完毕后,再找那篇帖子却怎么也 ...
- WPF自定义选择年月控件详解
本文实例为大家分享了WPF自定义选择年月控件的具体代码,供大家参考,具体内容如下 封装了一个选择年月的控件,XAML代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
- WPF 自定义柱状图 BarChart
WPF 自定义柱状图 当前的Telerik控件.DevExpress控件在图表控件方面做得不错,但是有时项目中需要特定的样式,不是只通过修改图表的模板和样式就能实现的. 或者说,通过修改当前的第三方控 ...
- WPF自定义窗口基类
WPF自定义窗口基类时,窗口基类只定义.cs文件,xaml文件不定义.继承自定义窗口的类xaml文件的根节点就不再是<Window>,而是自定义窗口类名(若自定义窗口与继承者不在同一个命名 ...
- WPF.UIShell UIFramework之自定义窗口的深度技术 - 模态闪动(Blink)、窗口四边拖拽支持(WmNCHitTest)、自定义最大化位置和大小(WmGetMinMaxInfo)
无论是在工作和学习中使用WPF时,我们通常都会接触到CustomControl,今天我们就CustomWindow之后的一些边角技术进行探讨和剖析. 窗口(对话框)模态闪动(Blink) 自定义窗口的 ...
- WPF自定义TabControl样式
WPF自定义TabControl,TabControl美化 XAML代码: <TabControl x:Class="SunCreate.Common.Controls.TabCont ...
- WPF自定义Window窗体样式
资源文件代码: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation ...
- WPF 自定义ComboBox样式,自定义多选控件
原文:WPF 自定义ComboBox样式,自定义多选控件 一.ComboBox基本样式 ComboBox有两种状态,可编辑和不可编辑状态.通过设置IsEditable属性可以切换控件状态. 先看基本样 ...
- WPF 自定义MenuItem样式
原文:WPF 自定义MenuItem样式 一.前言 默认的MenuItem样式比较普通,这次自定义MenuItem的样式也只是对MenuItem的颜色风格进行变化.需要其他功能的变化,大家可以根据样式 ...
- WPF 自定义 MessageBox (相对完善版 v1.0.0.6)
基于WPF的自定义 MessageBox. 众所周知WPF界面美观.大多数WPF元素都可以简单的修改其样式,从而达到程序的风格统一.可是当你不得不弹出一个消息框通知用户消息时(虽然很不建议在程序中频繁 ...
随机推荐
- JS 获取浏览器窗口大小 获取屏幕,浏览器,网页高度宽度
网页可见区域宽:document.body.clientWidth 网页可见区域高:document.body.clientHeight 网页可见区域宽:document.body.offsetWid ...
- PyCharm如何删除工程项目
1.在菜单中选择:file——>close project 2.选择需要删除的项目右上角的“×”号进行删除工程项目 3.找到工程项目的存放路径,删除对应的工程项目文件 通过上诉操作即可在pych ...
- Hdu 4920矩阵乘法(内存访问的讲究)
题目链接 Matrix multiplication Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K ( ...
- Android消息机制使用注意事项,防止泄漏
在Android的线程通信当中,使用频率最多的就是Android的消息处理机制(Handler.send().View.post().Asynctask.excute()等等都使用到了消息处理机制). ...
- 基于spring-boot的测试桩设计--几种常见的controller
第一种:通过@RequestBody,直接将请求体映射到对象 //@RequestBody @RequestMapping(value = "addUser", method = ...
- ubuntu上制作应用程序的快捷图标启动
最近在研究Go语言,对比了几种流行的IDE,发现GoLand是使用体验最好的,没有之一.这也印证了网友们常说的那句话“JetBrain出品,必属精品”. 在ubuntu环境下使用GoLand,直接到J ...
- element-ui el-time-picker
获取时分秒时间 <el-time-picker is-range v-model="time" value-format="HH:mm:ss" range ...
- [C#] 使用WebSocket进行通讯
客户端 客户端很简单 string url = "ws://localhost:24900/" + "test.ashx"; try { System.Net. ...
- Ceph 之 Background on http frontends
Background on http frontends -civetweb frontend --thread per connection, requires a lot of threads - ...
- python LEGB原理简要介绍