C# 解决为TextBox后台动态添加水印的问题
来源:互联网 发布:linux安全维护 编辑:程序博客网 时间:2024/05/22 07:49
最近在做WPF,有个需求需要动态生成TextBox,实现很简单,只需要把TextBox动态添加到ListBox中就可以了。后来对方说要在TextBox中显示水印,想了很多办法。
首先WPF中我并没有发现可以直接使用水印的方法,其次网上的很多教程都是写在前端(XAML定义)的,而且是每一个TextBox都需要定义对应的style,对于后台代码实现起来很麻烦。因此对于动态加载的TextBox不易实现水印。
在查了很多网上的资料后,我发现一种方法我可以借鉴。
<ControlTemplate x:Key="WaterMarkTextBox" TargetType="{x:Type TextBox}"> <Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> <Grid> <ScrollViewer x:Name="PART_ContentHost" Focusable="False" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"/> <TextBlock x:Name="InternalWatermarkLabel" Text="{TemplateBinding Tag}" FontStyle="Italic" Visibility="Collapsed" Focusable="False" Foreground="Silver"/> </Grid> </Border> <ControlTemplate.Triggers> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="IsFocused" Value="False" /> <Condition Property="Text" Value="" /> </MultiTrigger.Conditions> <MultiTrigger.Setters> <Setter Property="Visibility" TargetName="InternalWatermarkLabel" Value="Visible" /> </MultiTrigger.Setters> </MultiTrigger> <Trigger Property="IsEnabled" Value="False"> <Setter Property="Opacity" TargetName="border" Value="0.56"/> </Trigger> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="BorderBrush" TargetName="border" Value="#FF7EB4EA"/> </Trigger> <Trigger Property="IsKeyboardFocused" Value="True"> <Setter Property="BorderBrush" TargetName="border" Value="#FF569DE5"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate>
<TextBox Grid.Row="0" Grid.Column="1" Margin="0,15" Text="abcdefg" x:Name="tb_PassPhrase" VerticalAlignment="Center" Tag="Pass Phrase" Template="{DynamicResource WaterMarkTextBox}"> </TextBox>
如上先定义一段资源样式,在TextBox中只需要使用 Tag和Template就可以完成水印的功能,而且后台代码很容易实现。具体实现如下:
1、先在前台使用XAML定义这段样式
<Grid.Resources> <ControlTemplate x:Key="WaterMarkTextBox" TargetType="{x:Type TextBox}"> <Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> <Grid> <ScrollViewer x:Name="PART_ContentHost" Focusable="False" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"/> <TextBlock x:Name="InternalWatermarkLabel" Text="{TemplateBinding Tag}" FontStyle="Italic" Visibility="Collapsed" Focusable="False" Foreground="Silver"/> </Grid> </Border> <ControlTemplate.Triggers> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="IsFocused" Value="False" /> <Condition Property="Text" Value="" /> </MultiTrigger.Conditions> <MultiTrigger.Setters> <Setter Property="Visibility" TargetName="InternalWatermarkLabel" Value="Visible" /> </MultiTrigger.Setters> </MultiTrigger> <Trigger Property="IsEnabled" Value="False"> <Setter Property="Opacity" TargetName="border" Value="0.56"/> </Trigger> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="BorderBrush" TargetName="border" Value="#FF7EB4EA"/> </Trigger> <Trigger Property="IsKeyboardFocused" Value="True"> <Setter Property="BorderBrush" TargetName="border" Value="#FF569DE5"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Grid.Resources>2、后台只需在new TextBox时,添加tag和Template的属性即可。
TextBox tb = new TextBox(); tb.Width = 200; tb.Tag = Tishi[i]; tb.SetResourceReference(TextBox.TemplateProperty, "WaterMarkTextBox");Tag就是水印的内容,WaterMarkTextBox就是引用的资源Key。
这样就可以了,并不是老手,如果表达欠妥,请多多批评和指正。
0 0
- C# 解决为TextBox后台动态添加水印的问题
- 为textbox控件添加水印
- C# 后台动态生成textbox
- 在 Visual C# 中,如何为 TextBox 控件添加水印文字
- 在 Visual C# 中,怎样为 TextBox 控件添加水印文字
- C#解决动态添加控件时,控件闪烁的问题
- 解决TextBox的Disabled字体为灰色的问题
- C#为图片添加水印,生成缩略图
- 給TEXTBOX添加文字水印
- C# WINFORM TEXTBOX水印效果
- C# winform textbox 水印效果
- php添加为kindeditor水印问题
- C#中TextBox水印提示的实现过程
- TextBox属性设置为只读后台获取不到值的问题
- TextBox属性设置为只读后台获取不到值的问题
- 真正的动态添加TextBox控件
- 简单的为图片添加水印
- 为图片添加水印的源码
- Some Tips and Tricks about Qt
- PS基础知识六
- HDU 2114 Calculate S(n)(数学题)(数学公式)1^3+2^3+3^3+……+(n-1)^3+n^3=n^2(n+1)^2/4
- 文章标题
- cPanel下如何修改匿名FTP账号权限
- C# 解决为TextBox后台动态添加水印的问题
- 商品超市管理系统作业
- java中volatile关键字的含义
- PS基础知识七
- 利用TC进行流量控制
- Android自定义控件实现一个带文本与数字的圆形进度条
- android 中的OnAcitvityResult
- python for循环
- Spring IOC容器【p名称空间注入属性值 】