Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use an accesskey on a WPF Button with a custom ContentTemplate?

Scenario:

Currently I have this XAML code:

<Button Content="_Cancel" IsCancel="True" Command="{Binding Path=CancelCommand}" Margin="5">
   <Button.ContentTemplate>
      <DataTemplate>
         <TextBlock Margin="10,0,10,0" />
      </DataTemplate>
   </Button.ContentTemplate>
</Button>

Obviously the accesskey (the 'c' key: _Cancel) doesn't work in combination with the TextBlock. I actually think the TextBlock should be a ContentPresenter (below), but this crashes my Visual Studio 2010 instance every time.

<ContentPresenter Margin="10,0,10,0" RecognizesAccessKey="True" />

Question:

  • What's the best solution to use accesskeys on a WPF Button with a ContentTemplate?

Thanks in advance!

like image 278
Herman Cordes Avatar asked Sep 14 '11 12:09

Herman Cordes


People also ask

What is WPF AccessText?

The AccessText control in WPF converts a character preceded by an underscore to an Access Key. The Access Key is registered and therefore raises an event when pressed. This article demonstrates how to create and use an AccessText control in WPF using XAML and C#. Creating an AccessText.

What is the shortcut key for Set button in WPF?

When you press the key combination Alt+H, the command that is bound to the button will be executed. Show activity on this post. Thanks... but...

Which key will provide a label access in WPF?

While holding the Alt key down, you can now press one of the Access Keys (e.g. N, O or S) to activate the specific button. It will react as if it was clicked with the mouse.


1 Answers

Instead of TextBlock use AccessText thus:

<Button Content="_Cancel" IsCancel="True" Command="{Binding Path=CancelCommand}" Margin="5">
   <Button.ContentTemplate>
      <DataTemplate>
         <AccessText Margin="10,0,10,0" Text="{Binding}"/>
      </DataTemplate>
   </Button.ContentTemplate>
</Button>

PS. ContentPresenter should be used inside a ControlTemplate to display content according to a DataTemplate. If you use it within a DataTemplate it causes infinite recursion as the DataTemplate is invoked over and over again.

like image 121
Aviad P. Avatar answered Sep 26 '22 06:09

Aviad P.