I am developing a WPF application, and have a TextBlock which I want to use command binding to trigger a command on when clicked. What's the best way to achieve this?
The TextBlock-control does not have a Command property, but it does have a CommandManager. What is this? Can it be used for command bindings? I've seen many other controls as well with this property..
Is there some control I have overseen that can be used? Is it e.g. recommended to use a button and style it to not look like a button?
Is there some controls supporting Command bindings which I can wrap around the TextBlock?
Should I create a custom control which basically is a TextBlock, but with extra properties Command and CommandArgument which enables command binding on e.g. the MouseLeftButtonDown property.
Is there some control I have overseen that can be used? Is it e.g. recommended to use a button and style it to not look like a button?
Yes. The simplest approach would be to re-template a button to act like a TextBlock and leverage the command property on the button class.
Something like this:
<ControlTemplate TargetType="Button">
<TextBlock Text="{TemplateBinding Content}" />
</ControlTemplate>
...
<Button Content="Foo" Command="{Binding Bar}" />
The below XAML can be used to add a Command Binding to a WPF TextBlock which will then work on a mouse action.
<TextBlock FontWeight="Bold" Text="Header" Cursor="Hand">
<TextBlock.InputBindings>
<MouseBinding Command="ApplicationCommands.Cut" MouseAction="LeftClick"/>
</TextBlock.InputBindings>
</TextBlock>
The Command
can be one of the built-in application commands, which would use the syntax as shown above, or it can be a custom Command
that inherits from the ICommand
Interface. In that case, the syntax would be:
<MouseBinding Command="{Binding myCustomCommand}" MouseAction="LeftClick"/>
The MouseAction
doesn't provide any Intellisense tips on what to put there (in VS2015), so you have to do a little digging to get the valid enumerations.
As of .NET 4.5, the valid entries for MouseAction
are:
Constants shown above are taken from MSDN.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With