Включить привязку команд для TextBlock

Я разрабатываю приложение WPF и имею TextBlock, который я хочу использовать для привязки команды для запуска команды при нажатии. Какой лучший способ достичь этого?

  • Элемент управления TextBlock не имеет свойства Command, но имеет CommandManager. Что это? Может ли он использоваться для привязок команд? Я видел много других элементов управления, а также с этим свойством.

  • Есть ли контроль, который я контролировал, который можно использовать? Это, например, рекомендуется использовать кнопку и стиль, чтобы она не выглядела как кнопка?

  • Есть ли некоторые элементы управления, поддерживающие привязки команд, которые я могу обернуть вокруг TextBlock?

  • Должен ли я создать настраиваемый элемент управления, который в основном является TextBlock, но с дополнительными свойствами Command и CommandArgument, который позволяет связывать команды, например. свойство MouseLeftButtonDown.

Ответы

Ответ 1

Есть ли какой-то контроль, который я контролировал, который можно использовать? Это, например, рекомендуется использовать кнопку и стиль, чтобы она не выглядела как кнопка?

Да. Самый простой способ - переформатировать кнопку, чтобы действовать как TextBlock и использовать свойство команды в классе кнопок.

Что-то вроде этого:

<ControlTemplate TargetType="Button">
        <TextBlock Text="{TemplateBinding Content}" />
    </ControlTemplate>
...
<Button Content="Foo" Command="{Binding Bar}" />

Ответ 2

Ниже XAML можно использовать для добавления привязки команд к текстовому блоку WPF, который затем будет работать над действием мыши.

<TextBlock FontWeight="Bold" Text="Header" Cursor="Hand">
    <TextBlock.InputBindings>
        <MouseBinding Command="ApplicationCommands.Cut" MouseAction="LeftClick"/>
    </TextBlock.InputBindings>
</TextBlock>

Command может быть одной из встроенных команд приложения, которая будет использовать синтаксис, как показано выше, или может быть пользовательским Command, который наследуется от интерфейса ICommand. В этом случае синтаксис будет выглядеть следующим образом:

<MouseBinding Command="{Binding myCustomCommand}" MouseAction="LeftClick"/>

MouseAction не содержит никаких советов Intellisense о том, что их там помещать (в VS2015), поэтому вам нужно немного перекопать, чтобы получить допустимые перечисления.

Начиная с .NET 4.5, действительные записи для MouseAction:

  • LeftClick - щелчок левой кнопкой мыши.
  • LeftDoubleClick - щелчок левой кнопкой мыши.
  • MiddleClick - средняя кнопка мыши.
  • MiddleDoubleClick - средняя кнопка мыши дважды щелкните.
  • Нет - никаких действий.
  • RightClick - щелкните правой кнопкой мыши.
  • RightDoubleClick - щелкните правой кнопкой мыши правой кнопкой мыши.
  • WheelClick - вращение колеса мыши.

Константы, показанные выше, взяты из MSDN.

Ответ 3

<Window.Resources>
<CommandBinding x:Key="binding" Command="ApplicationCommands.Save" Executed="SaveCommand" CanExecute="SaveCommand_CanExecute" />
</Window.Resources>


<TextBox Margin="5" Grid.Row="2" TextWrapping="Wrap" AcceptsReturn="True" TextChanged="txt_TextChanged">
<TextBox.CommandBindings>
<StaticResource ResourceKey="binding"></StaticResource>
</TextBox.CommandBindings>
</TextBox>

Вы видели http://www.java2s.com/Tutorial/CSharp/0470__Windows-Presentation-Foundation/BindTextBoxsavecommandtoCommandBinding.htm