2011-02-25 41 views
15

私のアプリケーション全体では、表示されないアンダースコア(_)がいくつかあります。下線はWPFに表示されません

アクセサーによるものです。しかし、どうすればそれを無効にすることができますか?アプリケーションは広いですか?私は

+0

[WPFラベルアクセラレータキーを無効にする(テキストアンダースコアがありません)]の可能な複製](http://stackoverflow.com/questions/40733/disable-wpf-label-accelerator-key-text-underscore-is-missing) – Carl

答えて

16

あなたは、このようなラベルのデフォルトのテンプレートを上書きすることができ、すべてのラベルのためのグローバルアンダースコアを無効にするには:

<Style x:Key="{x:Type Label}" 
     TargetType="{x:Type Label}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Label}"> 
       <Border Background="{TemplateBinding Background}" 
         BorderThickness="{TemplateBinding BorderThickness}" 
         BorderBrush="{TemplateBinding BorderBrush}" 
         Padding="{TemplateBinding Padding}" 
         SnapsToDevicePixels="true"> 
        <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
             VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
             RecognizesAccessKey="False" 
             SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsEnabled" 
          Value="false"> 
         <Setter Property="Foreground" 
           Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

それは、この行のデフォルトのテンプレートとは異なります。 RecognizesAccessKey="False"

App.xaml)アプリケーションのグローバルリソースにこのスタイルをあなたのラベルはもうアンダースコアを認識しません。

+0

こんにちは!あなたのお返事ありがとうございます!私は今日それを試みますが、私が必要とするようです。デフォルト値をバインドすることは必須ですか? – J4N

+0

@ J4N - 何も束縛する必要はありません。このスタイルをグローバルリソース(App.xaml)に入れるだけで、アプリケーション内のすべてのラベルに自動的に適用されます(別のスタイルがラベルに明示的に指定されていない限り)。 –

+0

すみません、これらのことについて私は話していました: パディング= "{TemplateBindingパディング}" 必須ですか?なぜなら、何かを表示するはずのすべてのコンポーネントのためにそれをやろうとしたら、そのコードの量を減らしたいと思います。 – J4N

3

あなたはアンダースコアを倍増しようとしたことがありありがとう...、ラベル、テキストボックスにそれらを持っていませんか?

+0

ダブルアンダースコアがシングルではないことがなぜ起こっているのですか? – Ahmad

+1

@Ahmadアンダースコアは、次の文字がアクセスキーであることを示しているため(Altで使用されています;例えば、 "_Ahmad"というテキストはAlt + Aでアンダーラインでアクセスできます)。したがって、2つのアンダースコアはエスケープシーケンスです。 – SlapY

9

を使用して、2つのアンダースコア:

name = "__something"; 
+0

私はこれを使用することはできません、これらの値はデータベースから来て、私はすべてのフィールドでこれを行う余裕はありません。私のフィールドのほとんどは、私のオブジェクトの値に直接バインドされています。 – J4N

+3

値コンバーターを使用してアンダースコアをダブルアンダースコアに置き換えます。簡単です。 – Aliostad

6

一つの簡単な解決策はない<ラベル>を使用することです。 <TextBox>には下線が付きません。

+6

またはTextBlockを使用して、編集可能なものに対処したくない場合は、'Content'ではなく' Text'にバインドしてください。 –

関連する問題