我怎么能把一些文本放入一个文本框,这将被自动删除时,用户键入的东西在它?
当前回答
看看另一个简单的解决方案:
我专注于“得到专注”和“失去专注”事件。
XAML:
<Grid>
<TextBlock x:Name="DosyaİhtivaEdenDizinYansıması" Text="Hedef Dizin Belirtin" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center" Foreground="White" Background="Transparent" Width="500" MinWidth="300" Margin="10,0,0,0" Opacity="0.7"/>
<TextBox x:Name="DosyaİhtivaEdenDizin" CaretBrush="White" Foreground="White" Background="Transparent" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center" MinHeight="40" BorderThickness="1" BorderBrush="White" Width="500" MinWidth="300" Margin="10,0,0,0" GotFocus="DosyaİhtivaEdenDizin_GotFocus" LostFocus="DosyaİhtivaEdenDizin_LostFocus"/>
</Grid>
C#:
#region DosyaİhtivaEdenDizin
private void DosyaİhtivaEdenDizin_GotFocus(object sender, RoutedEventArgs e)
{
if (DosyaİhtivaEdenDizin.Text.Length == 0)
{
DosyaİhtivaEdenDizinYansıması.Text = "";
}
}
private void DosyaİhtivaEdenDizin_LostFocus(object sender, RoutedEventArgs e)
{
if (DosyaİhtivaEdenDizin.Text.Length == 0)
{
DosyaİhtivaEdenDizinYansıması.Text = "Hedef Dizin Belirtin";
}
}
#endregion
其他回答
你可以使用GetFocus()和LostFocus()事件来做到这一点
下面是例子:
private void txtData1_GetFocus(object sender, RoutedEventArgs e)
{
if (txtData1.Text == "TextBox1abc")
{
txtData1.Text = string.Empty;
}
}
private void txtData1_LostFocus(object sender, RoutedEventArgs e)
{
if (txtData1.Text == string.Empty)
{
txtData1.Text = "TextBox1abc";
}
}
Telerik有一个控件叫做RadWatermarkTextBox专门解决这个问题。如果您正在使用Telerik控件,只需按以下方式使用即可
<telerik:RadWatermarkTextBox
Text="{Binding Path=MyTextBoxText}"
WatermarkContent="Please enter some text" />
<TextBox Grid.Column="0" Name="TextBox_SearchBar" AcceptsReturn="False" AcceptsTab="False" TextWrapping="Wrap" KeyUp="TextBox_SearchBar_KeyUp" />
<TextBox Grid.Column="0" Name="TextBox_Watermark" Text="Search Test Sets" Foreground="Gray" GotFocus="TextBox_Watermark_GotFocus" />
private void TextBox_Watermark_GotFocus( object sender, RoutedEventArgs e ) {
TextBox_Watermark.Visibility = Visibility.Hidden;
TextBox_SearchBar.Focus();
}
这将创建两个文本框,一个用于接收水印的字段,另一个用于水印。接收水印的字段可以是ComboBox或其他控件(只要您获得正确的对齐并相应地获得焦点)。
水印必须是一个文本框或其他控制,可以获得焦点(TextBlock不能获得焦点,因为我学会了艰难的方式)。当水印文本框得到焦点,它隐藏自己,并给予访问其他文本框。
如果你想在搜索栏文本框失去焦点后重新显示水印,只需添加一个LostFocus事件处理程序到TextBox_SearchBar检查输入并切换TextBox_Watermark可见性为隐藏或可见,相应地。
我发现这个方法非常快速和简单
<ComboBox x:Name="comboBox1" SelectedIndex="0" HorizontalAlignment="Left" Margin="202,43,0,0" VerticalAlignment="Top" Width="149">
<ComboBoxItem Visibility="Collapsed">
<TextBlock Foreground="Gray" FontStyle="Italic">Please select ...</TextBlock>
</ComboBoxItem>
<ComboBoxItem Name="cbiFirst1">First Item</ComboBoxItem>
<ComboBoxItem Name="cbiSecond1">Second Item</ComboBoxItem>
<ComboBoxItem Name="cbiThird1">third Item</ComboBoxItem>
</ComboBox>
也许它能帮助到任何想这么做的人
来源:http://www.admindiaries.com/displaying-a-please-select-watermark-type-text-in-a-wpf-combobox/
如果水印的可见性不是取决于控件的焦点状态,而是取决于用户是否输入了任何文本,您可以将John Myczek的答案(从OnWatermarkChanged向下)更新为
static void OnWatermarkChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) {
var textbox = (TextBox)d;
textbox.Loaded += UpdateWatermark;
textbox.TextChanged += UpdateWatermark;
}
static void UpdateWatermark(object sender, RoutedEventArgs e) {
var textbox = (TextBox)sender;
var layer = AdornerLayer.GetAdornerLayer(textbox);
if (layer != null) {
if (textbox.Text == string.Empty) {
layer.Add(new WatermarkAdorner(textbox, GetWatermark(textbox)));
} else {
var adorners = layer.GetAdorners(textbox);
if (adorners == null) {
return;
}
foreach (var adorner in adorners) {
if (adorner is WatermarkAdorner) {
adorner.Visibility = Visibility.Hidden;
layer.Remove(adorner);
}
}
}
}
}
如果文本框在显示表单或绑定到Text属性时自动获得焦点,这就更有意义了。
同样,如果你的水印总是一个字符串,你需要水印的风格来匹配文本框的风格,那么在Adorner做:
contentPresenter = new ContentPresenter {
Content = new TextBlock {
Text = (string)watermark,
Foreground = Control.Foreground,
Background = Control.Background,
FontFamily = Control.FontFamily,
FontSize = Control.FontSize,
...
},
...
}
推荐文章
- 实体框架核心:在上一个操作完成之前,在此上下文中开始的第二个操作
- 如何为构造函数定制Visual Studio的私有字段生成快捷方式?
- 如何使用JSON确保字符串是有效的JSON。网
- AppSettings从.config文件中获取值
- 通过HttpClient向REST API发布一个空体
- 如何检查IEnumerable是否为空或空?
- 自动化invokerrequired代码模式
- 没有ListBox。SelectionMode="None",是否有其他方法禁用列表框中的选择?
- 在c#代码中设置WPF文本框的背景颜色
- 在c#中,什么是单子?
- c#和Java中的泛型有什么不同?和模板在c++ ?
- c#线程安全快速(est)计数器
- 如何将此foreach代码转换为Parallel.ForEach?
- 如何分裂()一个分隔字符串到一个列表<字符串>
- 如何转换列表<字符串>列表<int>?