0

以下の xaml を使用して、次のボタンを定義しようとしています。

  • イメージを持つ
  • 一部は外部 resx から、一部は vm プロパティから、連結されたテキストがあります
  • テキストの最初の文字に基づいたアクセラレータ キーを持っている

以下のマークアップは画像とテキストを表示しますが、アクセラレータ キーとしては機能しません (「_」が隠れず、Alt-A も機能しません)。

マークアップを修正してアクセラレータ キーの機能を取得するにはどうすればよいですか?


現在のマークアップと動作

<Style x:Key="AddNewItemButtonStyle" BasedOn="{StaticResource blueButtonStyle}" TargetType="{x:Type Button}">
    <Setter Property="Content">
        <Setter.Value>
            <StackPanel Orientation="Horizontal" >
                <Image Source="{resx:Resx ResxName=Presentation.Resources.MasterDetail, Key=bullet_add}" Stretch="Uniform" />
                <TextBlock Text="_"/>
                <TextBlock Text="{resx:Resx ResxName=Presentation.Resources.MasterDetail, Key=Subject_AddNew}" />
                <TextBlock Text=" "/>
                <TextBlock Text="{Binding Subject}" />
            </StackPanel>
        </Setter.Value>
    </Setter>
    <Setter Property="Command" Value="{Binding AddNewItemCommand}" />
</Style>

ここに画像の説明を入力

HB のコードで更新

画像だけ: ここに画像の説明を入力

<Style x:Key="AddNewItemButtonStyle" BasedOn="{StaticResource blueButtonStyle}" TargetType="{x:Type Button}">
    <Setter Property="Content" >
        <Setter.Value>
            <MultiBinding StringFormat="_{0} {1} {2}">
                <Binding Source="{resx:Resx ResxName=Presentation.Resources.MasterDetail, Key=Add}"/>
                <Binding Source="{resx:Resx ResxName=Presentation.Resources.MasterDetail, Key=New}"/>
                <Binding Path="Subject"/>
            </MultiBinding>
        </Setter.Value>
    </Setter>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <StackPanel Orientation="Horizontal">
                    <Image Source="{resx:Resx ResxName=Presentation.Resources.MasterDetail, Key=bullet_add}" Stretch="Uniform" />
                    <ContentPresenter/>
                </StackPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Command" Value="{Binding AddNewItemCommand}" />
</Style>
4

4 に答える 4

2

これは、ContentPresenter.RecognisesAccessKeyが に設定されているようfalseです。

また、誰かがここでそれについて話しています。

于 2012-04-20T15:40:55.507 に答える
1

You can use AccessText with a multi-binding

    <Style x:Key="AddNewItemButtonStyle" TargetType="{x:Type Button}">
        <Setter Property="Content">
            <Setter.Value>
                <StackPanel Orientation="Horizontal" >
                    <Image Source="{... your image}" Stretch="Uniform" />

                    <AccessText>
                        <AccessText.Text>
                            <MultiBinding StringFormat="{}_{0} {1}">
                                <Binding Source="{... resources}"/>
                                <Binding Source="{Binding Subject}"/>
                            </MultiBinding>
                        </AccessText.Text>
                    </AccessText>
                </StackPanel>
            </Setter.Value>
        </Setter>
    </Style>
于 2012-04-23T07:55:37.410 に答える
1

ラベル コントロールを使用してみてください。これは、2 つのコントロールがあり、1 つには 2 つ目のコントロールをトリガーするためのアクセス キーがある場合のために設計されています。

于 2012-04-27T18:35:01.913 に答える
0

テンプレートでは実行できない、結合Contentされたテキストにを設定する必要があります。

    <!-- (Resources changed for testing) -->
<Style TargetType="Button">
    <Setter Property="Content">
        <Setter.Value>
            <MultiBinding StringFormat="_{0} {1}">
                <Binding Source="{StaticResource Res_Add}"/>
                <Binding Path="Subject"/>
            </MultiBinding>
        </Setter.Value>
    </Setter>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <StackPanel Orientation="Horizontal">
                    <Image Source="{StaticResource Res_Image}" Stretch="Uniform"/>
                    <ContentPresenter/>
                </StackPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
于 2012-04-23T06:24:26.643 に答える