【问题标题】:WPF TextBox Border when selected?选中时WPF文本框边框?
【发布时间】:2010-09-30 15:24:00
【问题描述】:

我想让 WPF TextBox 有一个 DarkBlue 边框和厚度等于 1。我想让 WPF 有这个边框( DarkBlue,厚度设置为 1 ),即使选择了 TextBox。

我尝试通过以下代码执行此任务。但是,它根本不起作用。 任何想法或提示?任何帮助将不胜感激。

  <Style x:Key="ReadOnlyLargeTextBox" TargetType="{x:Type TextBox}" >
        <Setter Property="Height" Value="80"/>
        <Setter Property="MaxHeight" Value="80"/>

        <Setter Property="VerticalScrollBarVisibility" Value="Visible"/>
        <Style.Triggers>
            <Trigger Property="TextBox.IsMouseOver"    Value="True">
                <Setter Property="BorderBrush" Value="DarkBlue"/>
                <Setter Property="BorderThickness" Value="1"/>
            </Trigger>
            <Trigger Property="TextBox.IsMouseOver"    Value="False">
                <Setter Property="BorderBrush" Value="DarkBlue"/>
                <Setter Property="BorderThickness" Value="1"/>
            </Trigger>
        </Style.Triggers>


    </Style>

P.S 请注意,文本框没有 IsSelected 属性。

【问题讨论】:

  • “即使选择了 TextBox”:你是什么意思?选择 TextBox 时边框不会改变,因此您根本不需要触发器......只需将设置器放在样式中

标签: wpf textbox styling


【解决方案1】:

看看是不是你想要的...

<Style x:Key="TextBoxStyle1" BasedOn="{x:Null}" TargetType="{x:Type TextBox}">
        <Setter Property="BorderThickness" Value="1"/>
        <Setter Property="Padding" Value="1"/>
        <Setter Property="AllowDrop" Value="true"/>
        <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TextBox}">
                <Border x:Name="bg" BorderBrush="#FF825E5E" BorderThickness="1">
                        <ScrollViewer x:Name="PART_ContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                        </Border>
                    <ControlTemplate.Triggers>

                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="BorderBrush" TargetName="bg" Value="DarkBlue"/>
                            <Setter Property="BorderThickness" TargetName="bg" Value="2"/>
                        </Trigger>
                        <Trigger Property="IsFocused" Value="True">
                            <Setter Property="BorderBrush" TargetName="bg" Value="DarkBlue"/>
                            <Setter Property="BorderThickness" TargetName="bg" Value="2"/>
                        </Trigger>

                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style> 

【讨论】:

    【解决方案2】:

    我认为您的问题是由于触发器属性值包含 TextBox。您只需要属性的名称。

        <Style x:Key="ReadOnlyLargeTextBox" TargetType="{x:Type TextBox}">
            <Setter Property="Height" Value="80"/>
            <Setter Property="MaxHeight" Value="80"/>
    
            <Setter Property="VerticalScrollBarVisibility" Value="Visible"/>
    
            <Style.Triggers>
                <Trigger Property="IsFocused"  Value="True">
                    <Setter Property="BorderBrush" Value="Blue"/>
                    <Setter Property="BorderThickness" Value="1"/>
                </Trigger>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="BorderBrush" Value="Blue"/>
                    <Setter Property="BorderThickness" Value="1"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    

    【讨论】:

      【解决方案3】:

      检查 FrameworkElement 对象(TextBox 的祖先)的FocusVisualStyle 属性。它的目的是定义选择元素时应用的样式。

      【讨论】:

        【解决方案4】:

        当“IsMouseOver”为真和假时,你有相同的逻辑。换一个,你应该会看到一些东西。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-28
          • 2018-01-09
          • 2020-11-22
          • 2017-10-29
          • 1970-01-01
          相关资源
          最近更新 更多