Включить привязку команд для 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