簡體   English   中英

如何使鍵盤可滾動只讀 WPF 文本框?

[英]How to make a keyboard scrollable readonly WPF TextBox?

這似乎是一件很簡單的事情:使用 TextBox 顯示一些輸出並允許用戶從中剪切和粘貼,滾動它但不能編輯它。

但是:如果 TextBox 是只讀的,那么它會失去大部分鍵盤行為。 您可以單擊它並使用不可見的光標選擇文本,但它不會滾動或導航。

我有這個(糟糕的)解決方案。

<TextBox Focusable="True"
     VerticalScrollBarVisibility="Auto"
     HorizontalScrollBarVisibility="Auto"
     FontFamily="Consolas" FontSize="10pt"
     Foreground="{Binding Path=OutputTextColour}" 
     Text="{Binding Path=OutputText}"
     Background="White" PreviewKeyDown="TextBox_PreviewKeyDown" />

還有一個處理程序來丟棄任何編輯嘗試:

   private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e) {
  // the IsReadOnly flag on the control doesn't let the navigation keys work! WPF BUG?
  if (!(e.Key == Key.Down || e.Key == Key.Up || e.Key == Key.Left || e.Key == Key.Right 
     || e.Key == Key.Home || e.Key == Key.End || e.Key == Key.PageDown || e.Key == Key.PageUp 
     || e.Key == Key.Tab || e.Key == Key.Escape))
    e.Handled = true;
}

我還在 ScrollViewer 中嘗試了一個只讀的 TextBox,但看起來 TextBox,即使是只讀的,仍然會吞下導航擊鍵,而 ScrollView 永遠看不到它們。 如果 ScrollViewer 獲得焦點,則滾動有效,而剪切/復制/粘貼則無效!

是的,我可能可以通過使用 PreviewKeyDown 的一些花哨的步法來完成所有這些工作,但實際上我只想要一個播放效果很好的 TextBox!

答案是設置

IsReadOnlyCaretVisible="True"

如此處所述:

具有可見光標的 WPF 的只讀文本框 (.NET 3.5)

效果很好!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM