Как сделать так, чтобы WPF TextBox выступал в качестве компактной формы? - PullRequest
0 голосов
/ 13 октября 2010

Как сделать так, чтобы WPF TextBox выступал в качестве компактной формы?
Это означает, что «текст метки» внутри TextBox скрывается при щелчке или когда есть «настоящий текст». См. Рабочий прототип

1 Ответ

0 голосов
/ 13 октября 2010

Вы можете использовать триггер данных в стиле для 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;выравнивание текста надписи не совсем правильно, и вы, возможно, захотите преобразовать его в нечто более пригодное для повторного использования.«Сценарий, вам нужен более сложный триггер.Замените источник данных следующим:

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