【问题标题】:Databinding with DisplayMemberPath escapes underscore in menuitem与 DisplayMemberPath 的数据绑定在 menuitem 中转义下划线
【发布时间】:2018-04-15 23:42:45
【问题描述】:

好的,所以我们有一个最近的文件菜单选项。我们使用 MVVM 对 MenuItem 条目进行数据绑定并提供 DisplayMemberPath。但是 WPF 对字符串进行了转义,因此下划线显示为下划线而不是访问键

<MenuItem x:Name="RecentScripts" DisplayMemberPath="Caption" Header="Recent _Files" cal:Message.Attach="OpenRecentScript($orignalsourcecontext)">
    <MenuItem.Icon>
        <Image Source="{StaticResource IconOpen}"/>
    </MenuItem.Icon>
</MenuItem>   

https://github.com/AndersMalmgren/FreePIE/blob/recet_files_shortcut/FreePIE.GUI/Views/Main/Menu/MainMenuView.xaml#L35

我们也有自定义主题,但禁用 MennuItem 的样式并没有帮助 https://github.com/AndersMalmgren/FreePIE/blob/recet_files_shortcut/FreePIE.GUI/Themes/ExpressionDark.xaml#L1921

【问题讨论】:

  • 可以直接绑定access text吗? &lt;MenuItem ...&gt; &lt;MenuItem.Icon&gt; &lt;Image Source="{StaticResource IconOpen}"/&gt; &lt;/MenuItem.Icon&gt; &lt;AccessText&gt;_0&lt;/AccessText&gt; &lt;/MenuItem&gt;
  • 您需要指定标题模板并使用应该可以解决您的问题的Label。原因是因为默认模板使用TextBlock 而TextBlock 不使用下划线。
  • 但是相同的模板适用于没有数据绑定的菜单项,看截图最近的文件有它的访问文本
  • @3615 您的示例给出“使用 ItemsSource 之前,Items 集合必须为空。”
  • @Anders 是的,对,应该是 MenuItem.AccessText,但 MenuItem 不支持 AccessText。另一种方法可能是返回 AccessText 元素的值转换器,但看看你的实现它看起来并不容易,所以 ItemTemplate 似乎是最简单的方法。

标签: c# wpf mvvm data-binding caliburn.micro


【解决方案1】:

将 DisplayMemberPath 替换为 ItemTemplate。就像解释hereDisplayMemeberPath 是

单个属性的模板,显示在 TextBlock 中

正如@XAMlMAX 提到的,TextBlock 不支持 AccessText,而 Label 支持。

            <MenuItem x:Name="RecentScripts" Header="Recent _Files" cal:Message.Attach="OpenRecentScript($orignalsourcecontext)">
                <MenuItem.Icon>
                    <Image Source="{StaticResource IconOpen}"/>
                </MenuItem.Icon>
                <MenuItem.ItemTemplate>
                    <DataTemplate>
                        <Label Content="{Binding Caption}"/>
                    </DataTemplate>
                </MenuItem.ItemTemplate>
            </MenuItem> 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多