0

我正在尝试使用下面的 xaml 来定义一个 Button,它将:

  • 有图像
  • 具有连接文本,部分来自外部 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>

在此处输入图像描述

更新 w/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.RecognizesAccessKey设置为false

另外,有人在这里谈论它。

于 2012-04-20T15:40:55.507 回答
1

您可以将 AccessText 与多重绑定一起使用

    <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

尝试使用标签控件。它专为您有两个控件的情况而设计,其中一个控件具有用于触发第二个控件的访问键。

于 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 回答