【问题标题】:WPF border and textbox issue .NET 3.5WPF 边框和文本框问题 .NET 3.5
【发布时间】:2018-01-09 11:05:19
【问题描述】:

我在文本框周围有一个圆形边框。显示它时,尽管将“BorderThickness”属性设置为 0 并将“BorderBrush”设置为透明,但仍会显示文本框的水平顶线和底线。如何让文本框的边框不显示?

代码下方:

<Border Grid.Row="0" Grid.Column="0" 
      BorderBrush="DarkBlue"          
      BorderThickness="0.8" 
      CornerRadius="5"
      Margin="5,10,3,10" 
      Height="Auto" Width="Auto" 
      Background="AliceBlue" 
      HorizontalAlignment="Left">

      <TextBox x:Name="txtSearch"
               Width="250"
               Style="{StaticResource WatermarkedTextBox}" 
               VerticalAlignment="Center" 
               HorizontalAlignment="Left"
               BorderBrush="Transparent" 
               BorderThickness="0"
               Margin="1"/>
</Border>

知道为什么要显示文本框边框吗?

尝试#1

我发现罪魁祸首是附加的样式,即静态资源WatermarkedTextBox,如下:

<Style x:Key="WatermarkedTextBox" TargetType="TextBox">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="TextBox">
                <Grid>
                    <TextBox Text="{Binding Text, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}, UpdateSourceTrigger=PropertyChanged}" />
                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Center"
                          Text="{TemplateBinding Tag}" 
                          Margin="5,0,5,0"
                          Foreground="#FF808080"
                          FontStyle="Italic"
                          IsHitTestVisible="False"
                          x:Name="UserMessage"
                          Visibility="Hidden"/>
                </Grid>
                <ControlTemplate.Triggers>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="Text" Value=""/>
                            <Condition Property="IsKeyboardFocusWithin" Value="False"/>
                        </MultiTrigger.Conditions>
                        <Setter Property="Visibility" TargetName="UserMessage" Value="Visible"/>
                    </MultiTrigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

那我该如何解决呢?

【问题讨论】:

  • 有人知道为什么会这样吗?任何帮助将不胜感激。谢谢。

标签: wpf textbox grid .net-3.5 border


【解决方案1】:

罪魁祸首是设置为“WatermarkedTextbox”样式的文本框的边框,因此现在将 BorderThickness 属性设置为 0:

<Style x:Key="WatermarkedTextBox" TargetType="TextBox">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="TextBox">
                <Grid>
                    <TextBox BorderThickness="0" 
                             Text="{Binding Text, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}, UpdateSourceTrigger=PropertyChanged}" />
                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Center"
                          Text="{TemplateBinding Tag}" 
                          Margin="5,0,5,0"
                          Foreground="#FF808080"
                          FontStyle="Italic"
                          IsHitTestVisible="False"
                          x:Name="UserMessage"
                          Visibility="Hidden"/>
                </Grid>
                <ControlTemplate.Triggers>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="Text" Value=""/>
                            <Condition Property="IsKeyboardFocusWithin" Value="False"/>
                        </MultiTrigger.Conditions>
                        <Setter Property="Visibility" TargetName="UserMessage" Value="Visible"/>
                    </MultiTrigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    相关资源
    最近更新 更多