Die RichTextBox bietet eine lot of commands mit begleitenden Tastengesten.Wie Sie eine RichTextBox stoppen, um Tastengesten zu konsumieren
Wenn jedoch IsReadOnly=True
festgelegt ist, sind viele dieser Befehle nicht sinnvoll und führen keine Aktion aus, z. Ctrl + I, Strg + R. Dennoch, wenn ein Befehl im Fenster verwendet eine der wichtigsten Gesten, der Befehl in dem Fenster wird nicht ausgelöst, wenn die RichtTextBox Fokus hat:
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:"
mc:Ignorable="d">
<Window.CommandBindings>
<CommandBinding Command="local:MainWindow.MyCommand" Executed="MyCommandBinding_Executed" />
</Window.CommandBindings>
<StackPanel>
<RichTextBox Height="50" IsReadOnly="True" />
<CheckBox Content="This is a checkbox" />
<TextBlock Name="whatsGoingOn" />
</StackPanel>
</Window>
using System.Windows;
using System.Windows.Input;
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
public static RoutedUICommand MyCommand = new RoutedUICommand(
"My Command",
"MyCommand",
typeof(MainWindow),
new InputGestureCollection() { new KeyGesture(Key.R, ModifierKeys.Control) });
private void MyCommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
{
whatsGoingOn.Text += ".";
}
}
Nun, vielleicht ist die richtige Antwort "Verwenden Sie RichTextBox nicht mit IsReadOnly="True"
, verwenden Sie stattdessen etwas anderes", aber nehmen wir an, dass ich RichTextBox verwenden musste oder wollte.
Was kann ich tun, um Tastenbefehle auszuführen, selbst wenn RichTextBox den Fokus hat?
Intercepting PreviewKeyDown oder zwingende OnPreviewKeyDown in einer abgeleiteten Klasse machen den Befehl nicht Feuer hilft. Natürlich könnte ich 'MyCommand_Executed' manuell aufrufen, aber dann brauche ich keinen Befehl an erster Stelle. Außerdem ist das Abhören eines Schlüsselstrichs auf diese Weise ein wenig hackisch für den in dieser Frage genannten Grund: https://stackoverflow.com/questions/12125590/how-to-correctly-retrieve-modifier-keys-in-a-wpf- Keydown-Ereignis. Entschuldigung, aber ich bin nicht überzeugt :) – Martin