这似乎是一件很简单的事情:使用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,即使只是readonly,仍然会吞下导航按键,而ScrollView永远不会看到它们。如果ScrollViewer获得焦点,则滚动工作,剪切/复制/粘贴不会!
是的,我可能通过使用PreviewKeyDown的一些花哨的步法来完成所有工作,但实际上我只是想要一个非常好的TextBox!
答案 0 :(得分:7)
答案是设置
IsReadOnlyCaretVisible="True"
如下所述:
Readonly textbox for WPF with visible cursor (.NET 3.5)
工作得很漂亮!