簡體   English   中英

WPF 列表框。 跳過字符串中的下划線符號

[英]WPF listbox. Skip underscore symbols in strings

我有一些動態填充項目的 WPF ListBox。 像這樣的事情:

ListBox.Items.Add
(new ListBoxItem { Content = new CheckBox { IsChecked = true, Content = "string_string"} );

問題在於復選框內容。 它在 GUI 上顯示為“stringstring”...如何轉義“_”符號? (我動態獲取字符串)

您可以在 TextBlock 中添加文本並將該 TextBlock 放入 Chekbox,TextBlock 不支持 _ 助記符。 這就是我的意思,在 xaml 中,但您可以輕松地將其轉換為代碼:

<CheckBox IsChecked="True">
    <TextBlock>string_string</TextBlock>
</CheckBox>

CheckBox 的默認模板包含一個 ContentPresenter,其RecognizesAccessKey設置為 true。 如果內容是一個字符串(在您的情況下是這樣),則 ContentPresenter 創建一個AccessText元素來顯示文本。 該元素隱藏下划線,直到按下 Alt 鍵,因為它會將其視為助記符。 您可以重新模板化 CheckBox,使其 ContentPresenter 的 RecognizesAccessKey 為 false 或更好,但只需提供 DataTemplate 作為包含 TextBlock 的 ContentTemplate。 如果您不確定內容是否是字符串,那么您可以設置 ContentTemplateSelector 並在代碼中提供一個 DataTemplate,其中僅當項目是字符串時才包含 TextBlock。 例如

<ListBox xmlns:sys="clr-namespace:System;assembly=mscorlib">
    <ListBox.Resources>
        <DataTemplate DataType="sys:String" x:Key="stringTemplate">
            <TextBlock Text="{Binding}" />
        </DataTemplate>
        <Style TargetType="CheckBox">
            <Setter Property="ContentTemplate" Value="{StaticResource stringTemplate}" />
        </Style>
    </ListBox.Resources>
    <ListBoxItem>
        <CheckBox Content="A_B" ContentTemplate="{StaticResource stringTemplate}"/>
        <!-- Or use the implicit style to set the ContentTemplate -->
        <CheckBox Content="A_B" />
    </ListBoxItem>
</ListBox>

使用雙下划線 string__string,因為在 WPF 中,_ 是助記符。

更好的是,只需在 xaml 中解決此問題並在您的視圖模型(或代碼隱藏)中創建一個集合。

我在 DataGrid 中遇到了同樣的問題。 與 AndrewS 類似,我為 TextBlock 添加了樣式,但沒有使用 DataTemplate 或 ContentTemplate。 這樣就應用了 ColumnHeaderStyle 中的設置器 :) 但是,此解決方案僅適用於單個下划線,例如。 “a_b”,但不適用於“a__b”。

<DataGrid>
    <DataGrid.Resources>
        <Style TargetType="TextBlock">
            <Setter Property="Text" Value="{Binding}"/>
        </Style>
    </DataGrid.Resources>

    <DataGrid.ColumnHeaderStyle>
        <!-- my setters here do not get overridden -->
    </DataGrid.ColumnHeaderStyle>
</DataGrid>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM