2011-09-14 19 views
5

Escenario:¿Cómo utilizar una tecla de acceso en un botón de WPF con una ContentTemplate personalizada?

Actualmente tengo este código 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> 

Obviamente, la tecla de acceso (la 'c' clave: _Cancel) no funciona en combinación con el TextBlock. De hecho, creo que TextBlock debería ser un ContentPresenter (abajo), pero esto bloquea mi instancia de Visual Studio 2010 todo el tiempo.

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

Pregunta:

  • ¿Cuál es la mejor solución para utilizar teclas de acceso en un botón WPF con una ContentTemplate?

¡Gracias de antemano!

Respuesta

8

En lugar de TextBlock uso AccessText así:

<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 se debe utilizar dentro de ControlTemplate para mostrar el contenido de acuerdo con DataTemplate. Si lo usa dentro de un DataTemplate causa recursión infinita ya que el DataTemplate se invoca una y otra vez.

+0

¡Genial, rápido y funciona! ¡Gracias! –

Cuestiones relacionadas