63

.ContentLabel の値をアンダースコアを含む文字列に設定しています。最初のアンダースコアは、アクセラレータ キーとして解釈されています。

_基になる文字列を変更せずに (すべてをに置き換えて__)、ラベルのアクセラレータを無効にする方法はありますか?

4

4 に答える 4

89

ラベルのコンテンツとして TextBlock を使用する場合、そのテキストはアンダースコアを吸収しません。

于 2010-07-09T08:24:02.263 に答える
33

ラベルのデフォルトテンプレートにあるContentPresenterのRecognizesAccessKeyプロパティをオーバーライドできます。例えば:

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Grid>
    <Grid.Resources>
      <Style x:Key="{x:Type Label}" BasedOn="{StaticResource {x:Type Label}}" TargetType="Label">
        <Setter Property="Template">
          <Setter.Value>
            <ControlTemplate TargetType="Label">
              <Border>
                <ContentPresenter
                  HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                  VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                  RecognizesAccessKey="False" />
              </Border>
            </ControlTemplate>
          </Setter.Value>
        </Setter>
      </Style>
    </Grid.Resources>
    <Label>_This is a test</Label>
  </Grid>
</Page>
于 2008-09-02T22:06:09.767 に答える
1

アンダースコアを含む正確なテキストを出力するには、<TextBlock> ... </TextBlock> 代わりにa を使用します。<Label> ... </Label>

于 2017-04-19T13:34:45.677 に答える
0

なぜこれが好きではないのですか?

public partial class LabelEx : Label
    {
        public bool PreventAccessKey { get; set; } = true;

        public LabelEx()
        {
            InitializeComponent();
        }

        public new object Content
        {
            get
            {
                var content = base.Content;
                if (content == null || !(content is string))
                    return content;

                return PreventAccessKey ?
                    (content as string).Replace("__", "_") : content;
            }
            set
            {
                if (value == null || !(value is string))
                {
                    base.Content = value;
                    return;
                }

                base.Content = PreventAccessKey ?
                    (value as string).Replace("_", "__") : value;
            }
        }
    }
于 2017-05-22T15:22:24.563 に答える