如何使WPF TextBox充当紧凑形式?

时间:2010-10-13 07:20:40

标签: wpf wpf-controls

如何让WPF TextBox充当紧凑形式?
这意味着TextBox中的“标签文本”隐藏在点击上或存在“真实文本”时 See working prototype

1 个答案:

答案 0 :(得分:0)

您可以在TextBox的样式中使用数据触发器,并将背景设置为包含文本的内容。一个简单有用的样本就是:

<TextBox>
  <TextBox.Style>
    <Style TargetType="{x:Type TextBox}">
      <Style.Triggers>
        <DataTrigger Binding="{Binding Text, RelativeSource={RelativeSource Self}}" Value="">
          <Setter Property="Background">
            <Setter.Value>
              <VisualBrush Stretch="None" AlignmentX="Left">
                <VisualBrush.Visual>
                  <TextBlock Text="This is the label text" Foreground="Silver" />
                </VisualBrush.Visual>
              </VisualBrush>
            </Setter.Value>
          </Setter>
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </TextBox.Style>
</TextBox>

在Kaxaml中测试; “标签文本”对齐方式并不完全正确,您可能希望将其重构为更适合生产代码的内容。

编辑以涵盖“隐藏焦点”场景,您需要更复杂的触发器。将datatrigger替换为:

        <MultiDataTrigger>
          <MultiDataTrigger.Conditions>
            <Condition Binding="{Binding Text, RelativeSource={RelativeSource Self}}" Value="" />
            <Condition Binding="{Binding IsKeyboardFocused, RelativeSource={RelativeSource Self}}" Value="False" />
          </MultiDataTrigger.Conditions>
          <Setter Property="Background">
            <Setter.Value>
              <VisualBrush Stretch="None" AlignmentX="Left">
                <VisualBrush.Visual>
                  <TextBlock Text="This is the label text" Foreground="Silver" />
                </VisualBrush.Visual>
              </VisualBrush>
            </Setter.Value>
          </Setter>
        </MultiDataTrigger>