WFF текстовое поле с плоской рамкой - PullRequest
17 голосов
/ 19 марта 2010

нужно иметь стиль плоской границы для текстового поля на основе wpf ... очень удивлен видеть, что нет простого способа получить это, как в текстовом поле winforms BorderStyle.FixedSingle

Есть ли простой способ сделать это для текстового поля wpf

Ответы [ 3 ]

17 голосов
/ 18 октября 2011

Способ сделать это - использовать шаблон элемента управления, чтобы нарисовать границу самостоятельно. Вы можете сделать это разными способами, вот пара, на которую вы можете посмотреть.

Быстрый подход к взлому:

<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}" />
6 голосов
/ 19 марта 2010
<TextBox BorderThickness="1" BorderBrush="Black">

просто попробуйте это черным или серым

0 голосов
/ 27 июля 2018

Это лучший способ для меня: создать собственный шаблон с рамкой, чтобы переопределить шаблон по умолчанию.

И наиболее важная марка 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>
...