web-dev-qa-db-ja.com

wpfテキストボックスフラットボーダースタイル

wpfベースのテキストボックスにはフラットボーダースタイルが必要です... winformsテキストボックスBorderStyle.FixedSingleのようにこれを取得する簡単な方法がないことに本当に驚いています

wpfテキストボックスでこれを行う簡単な方法はありますか

18
Muhammad Adnan

これを行う方法は、コントロールテンプレートを使用して自分で境界線を描画することです。これはさまざまな方法で行うことができます。ここでは、いくつか見ていきます。

クイックハックアプローチ:

<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}" />
17
Michael Shaw
<TextBox BorderThickness="1" BorderBrush="Black">

黒または灰色でこれを試してみてください

6
Kishore Kumar

これは私にとってより良い方法であり、デフォルトのテンプレートを上書きするために、境界線のあるカスタムテンプレートを作成します。

そして最も重要なのはScrollViewerPART_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>
1
Val