问题
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!
回答1:
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.
来源:https://stackoverflow.com/questions/7416303/how-to-use-an-accesskey-on-a-wpf-button-with-a-custom-contenttemplate