I'd like to be able to click a textblock and have it run a Command. Is this possible? (if not do I just somehow make a tranparent button over it or something?)
Asked
Active
Viewed 5.1k times
3 Answers
151
You can use a InputBinding.
<TextBlock Text="Hello">
<TextBlock.InputBindings>
<MouseBinding Command="" MouseAction="LeftClick" />
</TextBlock.InputBindings>
</TextBlock>
Edit: Hyperlink is probably worth a mention too.
<TextBlock><Hyperlink Command="" TextDecorations="None" Foreground="Black">Hello</Hyperlink></TextBlock>

Kris
- 7,110
- 2
- 24
- 26
-
1This would quite great if it did not fire on mouse down, still +1 though for simplicity... – H.B. Aug 09 '11 at 23:24
-
2Yeah, MouseBinding can be a bit limited at times. The Hyperlink method I added executes on MouseUp – Kris Aug 09 '11 at 23:34
-
2Awesomesausage! I just changed it to `LeftDoubleClick` and got exactly what I needed! – Mark A. Donohoe Sep 01 '11 at 18:58
25
You do not make a transparent button over it, you put the TextBlock into it:
<Button>
<Button.Template>
<ControlTemplate TargetType="Button">
<ContentPresenter />
</ControlTemplate>
</Button.Template>
<TextBlock Text="Lorem Ipsum"/>
</Button>

H.B.
- 166,899
- 29
- 327
- 400
0
Well the button would consume your click and the click would not go further to your TextBlock
. If you don't need that, that would be one way to do it. You can modify the textblock ControlTemplate, and add the button, giving the button a new ControlTemplate with a transparent RectangleT. A nicer solution would be to use a way to hookup commands to events like EventBehavior and put it on the OnMouseLeftButtonDown
event.

dowhilefor
- 10,971
- 3
- 28
- 45