2016-05-13 8 views
0

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?

Antwort

0

Sie können die Tastenanschläge im PreviewKeyDown-Ereignis der RichTextBox abfangen. Setzen Sie das e.Handled-Mitglied auf "true", wodurch die tatsächliche Verarbeitung der Schlüssel verhindert wird.

Hoffe, dass es

+0

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

Verwandte Themen