2014-02-20 3 views
2

This question показал мне, как добавить текст водяного знака в свой TextBox. Я попытался реализовать его в своем проекте, но он заменяет фон моего TextBox.Как добавить фон в текстовое поле cue banner

Поскольку моя панель имеет другой цвет, цвет панели отображается через текстовое поле. Как я могу установить это правильно?

Я попытался установить фон метки на белый, но это не работает, потому что оно не растянуто.

<TextBox> 
    <TextBox.Style> 
     <Style TargetType="TextBox" xmlns:sys="clr-namespace:System;assembly=mscorlib"> 
      <Style.Resources> 
       <VisualBrush x:Key="CueBannerBrush" AlignmentX="Left" AlignmentY="Center" Stretch="Uniform"> 
        <VisualBrush.Visual> 
         <!-- set the background to white --> 
         <Label Content="Search" Foreground="LightGray" Background="White"/> 
        </VisualBrush.Visual> 
       </VisualBrush> 
      </Style.Resources> 
      <Style.Triggers> 
       <Trigger Property="Text" Value="{x:Static sys:String.Empty}"> 
        <Setter Property="Background" Value="{StaticResource CueBannerBrush}" /> 
       </Trigger> 
       <Trigger Property="Text" Value="{x:Null}"> 
        <Setter Property="Background" Value="{StaticResource CueBannerBrush}" /> 
       </Trigger> 
       <Trigger Property="IsKeyboardFocused" Value="True"> 
        <Setter Property="Background" Value="White" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </TextBox.Style> 
</TextBox> 

Это дает следующее:

uniform stretched background

Но установка Stretch для заполнения дает этот результат с растянутым текстом:

fill stretched background

+0

является то, что вид [водяные текстового поля] (http://stackoverflow.com/a/21673718/2998271) вы пытаетесь реализовать? нет? – har07

+0

Да, это так. Я только что нашел этот пост, и это казалось самым простым и очевидным решением, которое легко понять. Да, есть больше вариантов, которые я могу загрузить или воссоздать, но мне было просто интересно узнать об этом конкретном сообщении. – Marnix

ответ

-3

Вы можете добавить что-то позади текстового поля:

<StackPanel background="white"> 
     <textbox> 
     </textbox> 
    </StackPanel> 

Я думаю, что правая часть вашего текстового поля прозрачна, я прав? Я также думаю, что для этого есть лучший компонент, чем StackPanel.

0

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

class TextBoxWaterMark : TextBox 
{ 

#region Datafields 

private string pm_WaterMark = ""; 

#endregion 

#region Constructor 

public TextBoxWaterMark() 
{ 
} 

#endregion 

#region Control events 
protected override void OnGotFocus(RoutedEventArgs e) 
{ 
    base.OnGotFocus(e); 
    if ((string)this.Tag != "") 
    { 
    this.Foreground = new SolidColorBrush(Colors.Black); 
    this.Text = ""; 
    } 
} 

protected override void OnLostFocus(RoutedEventArgs e) 
{ 
    base.OnLostFocus(e); 
    if ((string)this.Tag != "") 
    { 
    if (this.Text == "") 
    { 
     this.Text = pm_WaterMark; 
     this.Foreground = new SolidColorBrush(Colors.Gray); 
    } 
    } 
} 
#endregion 

#region Public get and set methods 

public string WaterMark 
{ 
    get { return pm_WaterMark; } 
    set 
    { 
    pm_WaterMark = value; 
    this.Text = pm_WaterMark; 
    this.Foreground = new SolidColorBrush(Colors.Gray); 
    } 
} 
#endregion 

, а затем в моем коде XAML я просто добавлю его везде, где хочу.

<Form:TextBoxWaterMark WaterMark="Insert watermark text here" /> 

Надежды это то, что вы ищете: P

Смежные вопросы