如何使WPF文本框充当紧凑的表单?

如何使WPF文本框充当紧凑的表单?,wpf,wpf-controls,Wpf,Wpf Controls,如何使WPF文本框充当紧凑表单? 这意味着文本框中的“标签文本”在单击时或存在“真实文本”时隐藏起来。 您可以在文本框的样式中使用数据触发器,并将背景设置为包含文本的内容。一个简单有效的示例是: <TextBox> <TextBox.Style> <Style TargetType="{x:Type TextBox}"> <Style.Triggers> <DataTrigger Binding="{B

如何使WPF文本框充当紧凑表单?
这意味着文本框中的“标签文本”在单击时或存在“真实文本”时隐藏起来。

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

<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>

刚刚意识到我没有掩盖“聚焦隐藏”行为。。。如果有机会,我会更新。我在-