TextBox с привязкой данных должен отображать вспомогательный текст, когда он пуст - PullRequest
0 голосов
/ 25 сентября 2010

Я работаю над приложением в C #, используя .NET Framework 3.5.У меня есть TextBox на одной из моих форм, который связан со свойством «ID» DataContext формы, например так:

<TextBox x:Name="txtID" 
    Grid.Row="0" Grid.Column="1" 
    Margin="2" MinWidth="200" VerticalAlignment="Top"
    Style="{StaticResource validationToolTip}"
    >
    <TextBox.Text>
        <Binding Path="ID" UpdateSourceTrigger="PropertyChanged"    
            ValidatesOnDataErrors="true">
            <Binding.ValidationRules>
                <ui:RequiredFieldValidationRule />
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

Я бы хотел, чтобы TextBox отображал некоторый вспомогательный текст ("[Оставьте пустым, чтобы автоматически генерировать.] "), Когда свойство ID пусто и TextBox не имеет фокуса ввода.Я рассматриваю стилизацию этого текста по-другому (курсив), чтобы отличить его от введенного пользователем идентификатора.Однако поскольку свойство TextBox.Text связано со свойством ID, я хочу убедиться, что мое решение не устанавливает для свойства ID значение моей вспомогательной строки.Как мне реализовать это поведение?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2010

Вот простой подход, который довольно просто можно превратить в шаблон элемента управления или пользовательский элемент управления:

<Grid>
  <TextBox 
     Foreground="LightGray" 
     Focusable="False"
     Text="This is the help text."/>
  <TextBox 
     Focusable="True"
     Text="The help text only displays if this is empty.">
    <TextBox.Style>
      <Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
        <Style.Triggers>
          <DataTrigger 
             Binding="{Binding RelativeSource={RelativeSource Self}, Path=Text}"                   
             Value="">
            <Setter Property="Background" Value="Transparent"/> 
          </DataTrigger>
        </Style.Triggers>             
      </Style>
    </TextBox.Style>
  </TextBox>
</Grid>

Обратите внимание, что здесь установлен внутренний стиль, основанный на стиле по умолчанию для TextBox,так что это должно продолжать отображаться правильно, если вы глобально изменили стиль TextBox.

0 голосов
/ 25 сентября 2010

Простейшим подходом было бы иметь метку над текстовым полем для содержания текста или использовать всплывающую подсказку для текста Другим подходом может быть размещение класса между элементом управления и классом данных, с которым вы в данный момент связаны. Этот класс может затем передать требуемый текст «[Оставить пустым для автоматической генерации.]», Если текст в классе данных пуст, или передать значение, если это не так. Для всех других полей значение будет просто проходом через

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...