wpf中内容包含在border中_c# – WPF中TextBox的BorderThickness(一个bug?)

这是TextBoxes的Aero样式的默认行为.要禁用它,您需要重新设置TextBox.您可以使用

here的默认样式(请参阅下载示例).

在TextBoxBase的默认样式(TextBox所基于的样式)中,您将看到它使用ListBoxChrome.此元素在Presentation.Aero程序集中定义,负责呈现“聚焦”外观.您可以简单地删除RenderFocus设置和可能的RenderMouseOver,或者用Border替换它.

然后,您希望将其包含在您的应用程序资源中.

StartPoint="0,0" EndPoint="0,20" MappingMode="Absolute">

BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}"

SnapsToDevicePixels="true">

如果你看一下Reflector中的ListBoxChrome类(特别是OnRender方法),你可以看到它只会渲染焦点外观,如果它的BorderThickness是“1,1,1,1”.

WPF,可以通过设置TextBox控件的水印文本来实现添加背景字符。 以下是一个示例: ```xaml <TextBox Text="Enter text here..." Foreground="Gray" IsEnabled="{Binding IsTextBoxEnabled}" Style="{StaticResource MyTextBoxStyle}"/> ``` 其Text属性设置了文本框默认的提示文本,Foreground属性设置了提示文本的颜色。IsEnabled属性用于控制文本框是否可编辑。 另外,还需要定义一个样式来设置提示文本的样式: ```xaml <Style x:Key="MyTextBoxStyle" TargetType="TextBox"> <Style.Resources> <VisualBrush x:Key="WatermarkBrush" AlignmentX="Left" AlignmentY="Center" Stretch="None"> <VisualBrush.Visual> <TextBlock Text="Enter text here..." Foreground="Gray"/> </VisualBrush.Visual> </VisualBrush> </Style.Resources> <Setter Property="Background" Value="White"/> <Setter Property="BorderBrush" Value="Gray"/> <Setter Property="BorderThickness" Value="1"/> <Setter Property="Padding" Value="2"/> <Setter Property="Margin" Value="5"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type TextBox}"> <Grid> <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="True"/> <Border Background="{StaticResource WatermarkBrush}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="True" Opacity="{Binding Path=Text.IsEmpty, Converter={StaticResource BooleanToVisibilityConverter}}"> </Border> <ScrollViewer Margin="0" x:Name="PART_ContentHost"/> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsEnabled" Value="False"> <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> </Trigger> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> </Trigger> <Trigger Property="IsKeyboardFocused" Value="True"> <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> ``` 在样式,定义了一个VisualBrush作为提示文本的背景,使用了一个TextBlock作为VisualBrush的Visual元素,设置了文本和颜色。在控件模板,使用了两个Border元素,第一个用于显示文本框的背景和边框,第二个用于显示提示文本,通过Opacity属性来控制其显示和隐藏。最后,在控件模板添加了几个触发器来处理文本框的状态变化。 通过上述方式,就可以在WPF实现文本框添加背景字符的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值