2012-02-22 14 views
10

Tengo un problema cuando tengo un DataGridColumnHeader que está recibiendo texto con guiones bajos como contenido, y el primer guión bajo está oculto a menos que presione alt ("data_grid_thing" se muestra como "datagrid_thing"). Busqué un poco y encontré algunas soluciones a este problema para las etiquetas, ya que si convierte RecognizesAccessKey en falso, entonces el texto no se considerará 'AccessText' (. Sin embargo, esto no funciona para DataGridColumnHeader, como elimina todo el otro estilo, así que en lugar de un encabezado con texto dentro de él, obtengo espacios en blanco con texto. Intenté usar la propiedad BasedOn también sin ningún efecto.Primer guion bajo en un DataGridColumnHeader se elimina

Estoy abierto a soluciones a través del El lado C# (modificando la propiedad RecognizesAccessKey de alguna manera findi ng el ContentPresenter tal vez), o mediante la modificación de XAML (descubriendo una forma de preservar el estilo predeterminado).

Mi XAML es como la siguiente:

<Style x:Key="DataGridColumnHeaderStyle" BasedOn="{StaticResource {x:Type DataGridColumnHeader}}" TargetType="{x:Type DataGridColumnHeader}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="DataGridColumnHeader"> 
        <Border> 
         <ContentPresenter 
          HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
          VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
          RecognizesAccessKey="False" /> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

Gracias!

+0

Ah se me olvidó vincular esta: http://stackoverflow.com/questions/40733/disable-wpf-label-accelerator-key-text-underscore-is-missing Esto era lo más parecido a una solución Pude encontrar, solucionando el problema original, pero causando el problema de estilo que mencioné anteriormente. – Stuart

+0

Realmente no puedo reproducir esto, no parece tener acceso a conversión de texto en un DataGrid no modificado para mí ... –

+0

posible duplicado de [WPF listbox. Omitir símbolos de subrayado en cadenas] (http://stackoverflow.com/questions/4601801/wpf-listbox-skip-underscore-symbols-in-strings) – phoog

Respuesta

8

Este blog post dice que puede escapar del guión bajo doblándolo: "data__grid_thing".

Otro enfoque se pueden encontrar en la respuesta aceptada a this question

+1

Lamentablemente, la modificación de la cadena no es una opción. – Stuart

+1

@ Stuart ¿Qué pasa con la visualización de la cadena en un TextBlock como se sugiere en el enlace? – phoog

+0

¡Sí, eso funcionó! ¡Gracias! Es un poco poco elegante debido a algún otro código, pero no es terrible. – Stuart

7

Es a causa de la manipulación AccessKey. Simplemente escriba un controlador de eventos como este para escapar temporalmente de los guiones bajos en el encabezado de la cuadrícula de datos.

private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) 
{ 
    string header = e.Column.Header.ToString(); 

    // Replace all underscores with two underscores, to prevent AccessKey handling 
    e.Column.Header = header.Replace("_", "__"); 
} 
Cuestiones relacionadas