2012-02-22 12 views
10

Mam problem, gdy mam DataGridColumnHeader, który odbiera tekst z podkreślnikami jako treść, i pierwsze podkreślenie jest ukryte, chyba że naciśniesz alt ("data_grid_thing" wyświetla się jako "datagrid_thing" Szukałem trochę rozwiązania i znalazłem rozwiązania tego problemu dla etykiet, ponieważ jeśli zmienisz wartość RecognizesAccessKey na false, tekst nie będzie uznawany za "AccessText" (nie działa to jednak dla DataGridColumnHeader, as Usuwa wszystkie inne stylizacje, a więc zamiast nagłówka z tekstem wewnątrz tego tekstu, dostaję tylko spację z tekstem Próbowałem użyć właściwości BasedOn, ale bez skutkuPierwszy podkreślnik w DataGridColumnHeader zostaje usunięty

Jestem otwarty na rozwiązania zarówno poprzez C# side (modyfikowanie właściwości RecognizesAccessKey przez jakikolwiek findi w ContentPresenter) lub poprzez modyfikację XAML (wymyślenie sposobu zachowania domyślnego stylu).

Moje XAML wygląda mniej więcej tak:

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

Dzięki!

+0

Ach zapomniałem odwołuje się następująco: http://stackoverflow.com/questions/40733/disable-wpf-label-accelerator-key-text-underscore-is-missing To była najbliższa rzecz do rozwiązania Mogłem znaleźć, naprawiając pierwotny problem, ale powodując problem stylizacji, o którym wspomniałem powyżej. – Stuart

+0

Naprawdę nie mogę tego odtworzyć, nie wydaje mi się, aby uzyskać dostęp do konwersji tekstu w niezmodyfikowanej DataGrid dla mnie ... –

+0

możliwy duplikat [listbox WPF. Pomiń symbole podkreślenia w ciągach znaków (http://stackoverflow.com/questions/4601801/wpf-listbox-skip-underscore-symbols-in-strings) – phoog

Odpowiedz

8

Ta blog post mówi, że można uciec z podkreślenia, podwajając go: "data__grid_thing".

Innym podejściem można znaleźć w przyjętym odpowiedzi this question

+1

Modyfikacja napisu nie jest opcją. – Stuart

+1

@Stuart o wyświetlaniu ciąg w TextBlock zgodnie z sugestią w linku? – phoog

+0

Tak, zadziałało! Dzięki! Jest trochę nieelegancka z powodu jakiegoś innego kodu, ale nie jest straszna. – Stuart

7

To z powodu obchodzenia ACCESSKEY. Wystarczy napisać taką procedurę obsługi zdarzeń, aby tymczasowo uniknąć podkreśleń w nagłówku 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("_", "__"); 
} 
Powiązane problemy