2016-10-07 6 views
2

私はIsReadonly = Trueを設定したWPFテキストボックスを持っています。 Ctrl + C、Ctrl + Vを有効にしたい&このテキストボックスのコピー&ペースト機能を右クリックします。 WPFのテキストボックス内にinbuiltの機能はありますか?WPFの読み取り専用のテキストボックスにコピー貼り付け機能を有効にする

+5

Ctrl + Cを右クリックし、[コピー]をクリックします。ペースト - テキストボックスは読み込み専用なので、どのようにペーストすると思いますか? – Evk

答えて

1

私があなたの質問を正しく理解している場合は、コピー/ペーストのみ許可したいが他のテキスト入力は許可しない。ユーザーが移動してテキストを選択できるように、キーボードナビゲーション/選択を有効にしたい場合もあります。あなたがIsReadOnly = Trueを削除し、次のEventHandlerを設定する必要があること達成するために

:右クリックでカットエントリを無効にするには

private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    switch (e.Key) 
    { 
     // Enable copy/paste and selection of all text. 
     case Key.C: 
     case Key.V: 
     case Key.A: 
      if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) 
       return; 
      break; 

     // Enable keyboard navigation/selection. 
     case Key.Left: 
     case Key.Up: 
     case Key.Right: 
     case Key.Down: 
     case Key.PageUp: 
     case Key.PageDown: 
     case Key.Home: 
     case Key.End: 
      return; 
    } 
    e.Handled = true; 
} 

:背後にあるコードを

<TextBox PreviewKeyDown="TextBox_PreviewKeyDown"> 

は、このようになります。カスタムコンテキストメニューを設定する必要があります。

<TextBox PreviewKeyDown="TextBox_PreviewKeyDown"> 
    <TextBox.ContextMenu> 
     <ContextMenu> 
      <MenuItem Command="ApplicationCommands.Copy" /> 
      <MenuItem Command="ApplicationCommands.Paste" /> 
     </ContextMenu> 
    </TextBox.ContextMenu> 

これははCtrl +CはCtrl +V、右クリックコピー/ペースト機能を有効にしても、ほかのすべての入力を無効にする必要があります。

+1

これはそれです!ケースストラクチャにKey.BackとKey.Deleteを追加しました。 – Sandeep

0

私は、カスタムContextMenuを使用して、Copy, Pasteのコマンドを示しました。

私はContextMenuOpening/Closing eventsを表示してContextMenuと表示しました。これらのイベントを処理しないと、ContextMenuが表示されますが、コマンドは無効になります。

Ctrl+VペーストのPreviewKeyDownKeyDownイベントを処理しました。

私はCaretBrushTransparentに設定しました。それ以外の場合は、IsReadOnly = trueを設定すると表示されます。

<TextBox PreviewKeyDown="TextBox_PreviewKeyDown_1" KeyDown="TextBox_KeyDown_1" ContextMenuOpening="TextBox_ContextMenuOpening_1" ContextMenuClosing="TextBox_ContextMenuClosing_1" IsReadOnly="True" Text="a" CaretBrush="Transparent" Background="Bisque" Width="277"> 
    <TextBox.ContextMenu> 
     <ContextMenu> 
      <MenuItem Command="ApplicationCommands.Copy" /> 
      <MenuItem Command="ApplicationCommands.Paste" /> 
     </ContextMenu> 
    </TextBox.ContextMenu> 
</TextBox> 

ハンドラ:

private void TextBox_ContextMenuOpening_1(object sender, ContextMenuEventArgs e) 
{ 
    (sender as TextBox).IsReadOnly = false; 
} 

private void TextBox_ContextMenuClosing_1(object sender, ContextMenuEventArgs e) 
{ 
    (sender as TextBox).IsReadOnly = true; 
} 

private void TextBox_PreviewKeyDown_1(object sender, KeyEventArgs e) 
{ 
    if (e.Key == System.Windows.Input.Key.V && Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)) 
    { 
     (sender as TextBox).IsReadOnly = false; 
    } 
} 

private void TextBox_KeyDown_1(object sender, KeyEventArgs e) 
{ 
    (sender as TextBox).IsReadOnly = true; 
} 

これは手であなたの問題を解決するかどうか教えてください。

関連する問題