2012-02-22 9 views
10

Ho un problema in cui ho un oggetto DataGridColumnHeader che riceve testo con caratteri di sottolineatura come contenuto e il primo carattere di sottolineatura è nascosto a meno che non si prema alt ("data_grid_thing" viene visualizzato come "datagrid_thing" Ho cercato un po 'e trovato alcune soluzioni a questo problema per Labels, poiché se si attiva RecognizesAccessKey su false, il testo non verrà considerato come' AccessText '(. Ciò tuttavia non funziona per DataGridColumnHeader, come rimuove tutti gli altri stili, e invece di un'intestazione con testo all'interno, ottengo solo spazi bianchi con testo.Ho provato a usare anche la proprietà BasedOn senza alcun effettoViene rimosso il primo carattere di sottolineatura in un oggetto DataGridColumnHeader

Sono aperto a soluzioni sia attraverso il Lato C# (modificando la proprietà RecognizesAccessKey in qualche modo findi forse il ContentPresenter), o attraverso la modifica di XAML (cercando un modo per preservare lo stile predefinito).

mio XAML simile a questa:

<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> 

Grazie!

+0

Ah ho dimenticato di collegare questo: http://stackoverflow.com/questions/40733/disable-wpf-label-accelerator-key-text-underscore-is-missing Questa è stata la cosa più vicina ad una soluzione Potrei trovare, risolvendo il problema originale, ma causando il problema di stile che ho menzionato sopra. – Stuart

+0

Non riesco davvero a riprodurre questo, non sembra fare la conversione del testo di accesso in un DataGrid non modificato per me ... –

+0

possibile duplicato di [WPF listbox. Salta i simboli di sottolineatura nelle stringhe] (http://stackoverflow.com/questions/4601801/wpf-listbox-skip-underscore-symbols-in-strings) – phoog

risposta

8

Questo blog post dice che è possibile evitare il trattino di sottolineatura raddoppiandolo: "data__grid_thing".

Un altro approccio può essere trovato nella risposta accettato di this question

+1

La modifica della stringa non è purtroppo un'opzione. – Stuart

+1

@Stuart cosa ne pensi di visualizzare la stringa in un TextBlock come suggerito nel link? – phoog

+0

Sì, ha funzionato! Grazie! È un po 'poco elegante a causa di qualche altro codice, ma non è terribile. – Stuart

7

E 'a causa del trattamento AccessKey. Basta scrivere un gestore di eventi come questo per sfuggire temporaneamente ai caratteri di sottolineatura nell'intestazione datagrid.

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("_", "__"); 
} 
Problemi correlati