WPF文本框扁平边框样式

20

需要为基于WPF的文本框设置平坦边框样式...真的很惊讶,因为在WinForms的文本框中获取此功能非常容易,只需使用BorderStyle.FixedSingle即可。

是否有任何简单的方法可以实现WPF文本框的此功能呢?

3个回答

19

要实现这个目标,需要使用控件模板自己绘制边框。有很多不同的方法可以实现,这里举例几种。

快速的hack方法:

<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}" />

7
<TextBox BorderThickness="1" BorderBrush="Black">

只需尝试使用黑色或灰色即可


8
只有在文本框没有获得焦点时,这个方法才有效。当文本框被选中时,边框会以两种蓝色进行高亮显示。 - Michael Shaw

2

这是更好的方法,使用带有边框的自定义模板来覆盖默认模板。

最重要的是将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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接