WPF教程(十七)TextBox

文本框是WPF最基礎的文本輸入控件,允許終端用戶編寫文本,可以是一行文字,也可以是多行。

單行文本框

文本框是如此的簡單,你都不需要設置任何屬性,就可以擁有一個完整的可編輯區。

<span style="font-size:14px;"><Window x:Class="WpfTutorialSamples.Basic_controls.TextBoxSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="TextBoxSample" Height="80" Width="250">
    <StackPanel Margin="10">
                <TextBox />
        </StackPanel>
</Window></span>
A simple TextBox control

以上代碼就可以生成一個文本框,截圖中的文字是我在運行代碼之後輸入進去的。你可以在標記裏面預先輸入,使用以下屬性:

<span style="font-size:14px;"><TextBox Text="Hello, world!" /></span>
右擊文本框,會彈出一個菜單,允許你使用系統剪切板。還可以使用默認的鍵盤快捷鍵,撤銷Ctrl+Z和重做Ctrl+Y,所有這些都是自動獲得的。

多行文本框

運行上面的例子,你會發現文本框默認的是單行。按下Enter鍵沒什麼反應,如果一直添加文字直到超出單行長度,文本框會滾動。下面的例子展示瞭如何顯示多行:

<span style="font-size:14px;"><Window x:Class="WpfTutorialSamples.Basic_controls.TextBoxSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="TextBoxSample" Height="160" Width="280">
    <Grid Margin="10">
                <TextBox AcceptsReturn="True" TextWrapping="Wrap" />
        </Grid>
</Window></span>

代碼中添加了兩個屬性:AcceptsReturn決定了文本框是多行的,當你按下回車鍵時,換到下一行。TextWrapping使文字到達右邊界時自動切換到下一行。

使用文本框選擇器

和其他系統的文本編輯控件一樣,文本框可以一次性刪除全部文字,拷貝一部分到剪切板。WPF文本框在選擇文字後擁有一系列屬性,你可以查看甚至修改。

<span style="font-size:14px;"><Window x:Class="WpfTutorialSamples.Basic_controls.TextBoxSelectionSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="TextBoxSelectionSample" Height="150" Width="300">
	<DockPanel Margin="10">
		<TextBox SelectionChanged="TextBox_SelectionChanged" DockPanel.Dock="Top" />
		<TextBox Name="txtStatus" AcceptsReturn="True" TextWrapping="Wrap" IsReadOnly="True" />

	</DockPanel>
</Window></span>
上面的例子包含了兩個文本框控件:一個用戶編輯文字,一個用於輸出當前選擇器的狀態。因此,我們設置了IsReadOnly屬性爲True,防止在狀態文本框中編輯。在第一個文本框中訂閱SelectionChanged事件,在後臺代碼如下處理:

<span style="font-size:14px;">using System;
using System.Text;
using System.Windows;
using System.Windows.Controls;

namespace WpfTutorialSamples.Basic_controls
{
	public partial class TextBoxSelectionSample : Window
	{
		public TextBoxSelectionSample()
		{
			InitializeComponent();
		}

		private void TextBox_SelectionChanged(object sender, RoutedEventArgs e)
		{
			TextBox textBox = sender as TextBox;
			txtStatus.Text = "Selection starts at character #" + textBox.SelectionStart + Environment.NewLine;
			txtStatus.Text += "Selection is " + textBox.SelectionLength + " character(s) long" + Environment.NewLine;
			txtStatus.Text += "Selected text: '" + textBox.SelectedText + "'";
		}
	}
}
</span>
A TextBox control with selection status

我們實現瞭如下功能:

SelectionStart:獲取當前光標的位置,也就是選擇器開始的地方。

SelectionLength:獲取當前選擇器的長度,否則返回0.

SelectedText:獲取當前選中的字符,否則返回空的字符串

修改選擇器

所有這些屬性都是可讀可寫的,例如,通過設置SelectionStartSelectionLength這兩個屬性,可以選中一段文字;設置SelectedText屬性可以插入和選擇一個字符串。最後一定要記住,使用文本框之前,必須先獲得焦點,可以使用Focus()方法。





發佈了12 篇原創文章 · 獲贊 43 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章