2012-02-22 36 views
10

Tôi gặp sự cố khi tôi có DataGridColumnHeader đang nhận văn bản có dấu gạch dưới là nội dung và dấu gạch dưới đầu tiên bị ẩn trừ khi bạn nhấn alt ("data_grid_thing" hiển thị dưới dạng 'datagrid_thing " Tôi tìm kiếm xung quanh một chút, và tìm thấy một số giải pháp cho vấn đề này cho Nhãn, vì nếu bạn bật RecognizesAccessKey thành false, thì văn bản sẽ không được coi là 'AccessText' (tuy nhiên điều này không làm việc cho DataGridColumnHeader, như nó loại bỏ tất cả các phong cách khác, và vì vậy thay vì một tiêu đề với văn bản bên trong của nó, tôi chỉ nhận được khoảng trắng với văn bản. Tôi đã thử sử dụng thuộc tính BasedOn cũng như không có hiệu lực. C# side (sửa đổi thuộc tính RecognizesAccessKey bằng cách nào đó findi ng the ContentPresenter có lẽ), hoặc thông qua sửa đổi XAML (tìm ra cách để bảo tồn kiểu mặc định).Dấu gạch dưới đầu tiên trong một DataGridColumnHeader bị xóa

My XAML trông giống như sau:

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

Cảm ơn!

+0

Ah Tôi quên liên kết này: http://stackoverflow.com/questions/40733/disable-wpf-label-accelerator-key-text-underscore-is-missing Đây là điều gần nhất với giải pháp Tôi có thể tìm thấy, khắc phục vấn đề ban đầu, nhưng gây ra vấn đề về kiểu dáng mà tôi đã đề cập ở trên. – Stuart

+0

Không thể thực sự tái tạo điều này, dường như không thực hiện chuyển đổi văn bản truy cập trong một DataGrid chưa sửa đổi cho tôi ... –

+0

bản sao có thể có của [hộp danh sách WPF. Bỏ qua các ký hiệu gạch dưới trong chuỗi] (http://stackoverflow.com/questions/4601801/wpf-listbox-skip-underscore-symbols-in-strings) – phoog

Trả lời

8

Điều này blog post nói rằng bạn có thể thoát khỏi gạch dưới bằng cách tăng gấp đôi: "data__grid_thing".

cách tiếp cận khác có thể được tìm thấy trong các câu trả lời được chấp nhận để this question

+1

Sửa đổi chuỗi rất đáng tiếc không phải là một tùy chọn. – Stuart

+1

@Bắt đầu những gì về hiển thị chuỗi trong một TextBlock như được đề xuất trong liên kết? – phoog

+0

Đúng, đã hoạt động! Cảm ơn! Đó là một chút không phù hợp do một số mã khác, nhưng không khủng khiếp. – Stuart

7

Đó là vì xử lý accesskey. Chỉ cần viết một trình xử lý sự kiện như thế này để tạm thời thoát khỏi dấu gạch dưới trong tiêu đề 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("_", "__"); 
} 
Các vấn đề liên quan