Сделать текстовое поле WPF ограниченным для вырезания, копирования и вставки

Как сделать так, чтобы текстовое поле WPF вырезалось, копировалось и вставлялось с ограничениями?


person Sauron    schedule 02.06.2009    source источник
comment
Я мало знаю о WPF. Вместо этого вы можете использовать метку (которая не позволит вам вырезать/копировать/вставить.   -  person shahkalpeshp    schedule 02.06.2009
comment
Но я хочу, чтобы пользователь вводил данные с клавиатуры.   -  person Sauron    schedule 02.06.2009


Ответы (2)


Вырезать, Копировать и Вставить — общие команды, используемые любым приложением,

<TextBox CommandManager.PreviewExecuted="textBox_PreviewExecuted"
         ContextMenu="{x:Null}" />

в приведенном выше коде текстового поля мы можем ограничить эти команды в событии PrviewExecuted класса CommandManager

и в коде добавьте код ниже, и ваша работа выполнена

private void textBox_PreviewExecuted(object sender, ExecutedRoutedEventArgs e)
{
     if (e.Command == ApplicationCommands.Copy ||
         e.Command == ApplicationCommands.Cut  || 
         e.Command == ApplicationCommands.Paste)
     {
          e.Handled = true;
     }
}
person Prashant Cholachagudda    schedule 02.06.2009
comment
Я думаю, мне также нужно установить для контекстного меню значение null. - person Sauron; 02.06.2009
comment
Это идеально, если вы отключите контекстное меню - person Prashant Cholachagudda; 02.06.2009
comment
Я предлагаю всем использовать его в следующей форме: e.Command == ApplicationCommands.Cut, вместо того, чтобы приводить и полагаться на строку, которая может измениться из-за локализации. Я отправил предложение по редактированию Прашанту. - person VitalyB; 27.09.2011
comment
Я столкнулся с той же проблемой в моем приложении Windows Phone 8.1. В приложении Windows Phone нет CommandManager .. кто-нибудь может помочь? - person Tasnim Fabiha; 26.02.2017

Метод commandName не будет работать в системе с японской ОС, так как сравнение commandName=="Paste" не удастся. Я попробовал следующий подход, и он сработал для меня. Также мне не нужно отключать контекстное меню вручную.

В файле XaML:

<PasswordBox.CommandBindings>
    <CommandBinding Command="ApplicationCommands.Paste"
    CanExecute="CommandBinding_CanExecutePaste"></CommandBinding>
</PasswordBox.CommandBindings>

В коде позади:

private void CommandBinding_CanExecutePaste(object sender, CanExecuteRoutedEventArgs e)
{
    e.CanExecute = false;
    e.Handled = true;
}
person Debashis Panda    schedule 22.06.2010