Как использовать ключ доступа на кнопке WPF с пользовательским шаблоном ContentTemplate? - PullRequest
5 голосов
/ 14 сентября 2011

Сценарий:

В настоящее время у меня есть этот код XAML:

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

Очевидно, что ключ доступа (клавиша 'c': _Cancel) не работает в сочетании с TextBlock. Я на самом деле думаю, что TextBlock должен быть ContentPresenter (ниже), но это каждый раз приводит к сбою моего экземпляра Visual Studio 2010.

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

Вопрос:

  • Как лучше всего использовать клавиши доступа на кнопке WPF с шаблоном ContentTemplate?

Заранее спасибо!

1 Ответ

8 голосов
/ 14 сентября 2011

Вместо TextBlock используйте AccessText, таким образом:

<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 следует использовать внутри ControlTemplate для отображения содержимого в соответствии с DataTemplate.Если вы используете его в DataTemplate, это вызывает бесконечную рекурсию, так как DataTemplate вызывается снова и снова.

...