我有一個TextBlock
提供了一個文本。當用戶點擊文本時,它會被一個TextBox
(綁定到相同的數據)動態替換,從而有效切換到「編輯模式」。這也顯着改善了性能。如何知道用戶在WPF TextBlock中點擊了哪個字母
唯一需要注意的是,我無法知道用戶點擊了哪部分文字。因此,光標總是出現在TextBox
的第一個位置。理想情況下,光標應該出現在用戶點擊的相同文本位置。
我有一個TextBlock
提供了一個文本。當用戶點擊文本時,它會被一個TextBox
(綁定到相同的數據)動態替換,從而有效切換到「編輯模式」。這也顯着改善了性能。如何知道用戶在WPF TextBlock中點擊了哪個字母
唯一需要注意的是,我無法知道用戶點擊了哪部分文字。因此,光標總是出現在TextBox
的第一個位置。理想情況下,光標應該出現在用戶點擊的相同文本位置。
值得注意的是,解決方案非常簡單直接。但是,它仍然使用TextBox而不是TextBlock。以下方法從鼠標單擊事件和觸發事件的TextBox接收MouseButtonEventArgs,並返回用戶單擊的文本索引。
private int GetMouseClickPosition(MouseButtonEventArgs mouseButtonEventArgs,
TextBox textBox1)
{
Point mouseDownPoint = mouseButtonEventArgs.GetPosition(textBox1);
return textBox1.GetCharacterIndexFromPoint(mouseDownPoint, true);
}
試試這個:
LockedTextBoxStyle
IsKeyboardFocused
當真正的一套風格創建觸發器LockedTextBoxStyle
由於IsReadOnlyCaretVisible設置爲true,我希望會保持插入位置。還沒有測試過。
有點晚,但我同樣的問題摔跤,這是我想出了一個解決方案,原油雖然它可能是,它似乎只是很好地工作:
<Window x:Class="MyWindow.MainWindow"
...
...
<TextBlock MouseLeftButtonUp="TextBlock_OnMouseLeftButtonUp">Here is some Text</TextBlock>
<TextBox Name="TextBox1" Width="150"></TextBox>
然後,在後面的代碼中:
private void TextBlock_OnMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
TextBlock tb = sender as TextBlock;
TextPointer tp = tb.GetPositionFromPoint(e.GetPosition(tb), false);
int index = tp.GetLineStartPosition(0).GetOffsetToPosition(tp) - 1;
TextBox1.Text = tb.Text;
TextBox1.Focus();
TextBox1.CaretIndex = index;
}
有趣的是,這是Visual Studio選擇不解決的問題。如果您在解決方案資源管理器中單擊突出顯示的文件名(允許您重命名該文件),則文本將突出顯示,這意味着您現在需要再次在文本框內單擊以放置插入符號。如果你沒有得到你的問題的答案,也許這可能是一個解決方法? – kiwipom 2010-07-15 08:07:30