需要有基于wpf的文本框平面边框样式...非常惊讶地发现,没有像winforms textbox BorderStyle.FixedSingle中那样的简单方法来实现这一点
对于wpf文本框,有什么简单的方法可以做到这一点吗?
发布于 2011-10-18 08:15:25
执行此操作的方法是使用控件模板自己绘制边框。你可以用很多不同的方法来做这件事,这里有几个供你参考。
快速破解方法:
<TextBox>
<TextBox.Template>
<ControlTemplate TargetType="{x:Type TextBox}">
<Grid>
<Rectangle Stroke="{StaticResource ResourceKey=detailMarkBrush}" StrokeThickness="1"/>
<TextBox Margin="1" Text="{TemplateBinding Text}" BorderThickness="0"/>
</Grid>
</ControlTemplate>
</TextBox.Template>
</TextBox>
然后就是使用资源...
<ResourceDictionary>
<Color x:Key="detailMark">#FFA1A9B3</Color>
<SolidColorBrush x:Key="detailMarkBrush" Color="{StaticResource ResourceKey=detailMark}" />
<Style x:Key="flatTextBox" TargetType="{x:Type TextBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Grid>
<Rectangle Stroke="{StaticResource ResourceKey=detailMarkBrush}" StrokeThickness="1"/>
<TextBox Margin="1" Text="{TemplateBinding Text}" BorderThickness="0"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
然后你可以使用样式:
<TextBox Style="{StaticResource ResourceKey=flatTextBox}" />
发布于 2010-03-19 13:32:04
<TextBox BorderThickness="1" BorderBrush="Black">
试一下黑色或灰色的
发布于 2018-07-27 10:52:09
这对我来说是更好的方式,制作一个带边框的自定义模板,覆盖默认的模板。
最重要的是让ScrollViewer
命名为PART_ContentHost
,以适应内部的TemplatePart
,并且对于任何其他功能都像默认一样工作。
与MSDN中的示例相似
<Style TargetType="TextBox">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBoxBase}">
<Border CornerRadius="2" Padding="2" Background="#19212F" BorderBrush="Red" BorderThickness="1">
<ScrollViewer Margin="0" x:Name="PART_ContentHost" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
https://stackoverflow.com/questions/2475086
复制相似问题