简体   繁体   English

WPF 菜单项选择

[英]WPF Menu Item Selection

I have a MenuItem which sub items is generated through a ItemsControl items source colletion.我有一个 MenuItem,它的子项目是通过 ItemsControl 项目源集合生成的。 If I add MenuItems in the xaml, each individual item display a selection on it self when mouse over, see first image.如果我在 xaml 中添加 MenuItems,当鼠标悬停时,每个单独的项目都会在其自身上显示一个选择,请参见第一张图片。 On the collection bound item it also "selects the collection" and it also gets indented, see second image, how can I disable this?在集合绑定项目上,它还“选择集合”并且它也被缩进,参见第二张图片,我该如何禁用它?

XAML XAML

<MenuItem 
Name="Template" 
Header="Startmall"/>
<MenuItem 
    Header="Symboler" 
    Name="CustomerSymbols">
    <MenuItem Header="Test1"/>
    <MenuItem Header="Test2"/>
    <MenuItem Header="Test3"/>
    <ItemsControl ItemsSource="{Binding CustomerSymbols}"/>

C# C#

//Populating CustomerSymbols on class initalization
private void LoadCustomerSymbols()
{
    List<string> files = Settings.CustomerFiles; // List of string files

    foreach(string file in files)
    { 
        MenuItem menuItem = new MenuItem();
        string fileName = Path.GetFileNameWithoutExtension(file);
        menuItem.Header = fileName;
        CustomerSymbols.Add(menuItem);
    }
}

MenuItem 单选

MenuItem 集合选择

This is not valid这是无效的

<ItemsControl ItemsSource="{Binding CustomerSymbols}"/>

You can do it like this你可以这样做

<MenuItem Header="Symboler">
    <MenuItem.ItemsSource>
        <CompositeCollection>
            <CollectionContainer Collection="{Binding Source={StaticResource MyMenuItems}}" />
            <MenuItem Header="Test1" />
            <MenuItem Header="Test2" />
            <MenuItem Header="Test3" />
        </CompositeCollection>
    </MenuItem.ItemsSource>
</MenuItem>

Define MyMenuItems at one of MenuItem's parents' resources (ex. <Menu /> )在 MenuItem 的父资源之一定义MyMenuItems (例如<Menu />

Full example:完整示例:

<Menu>
    <Menu.Resources>
        <CollectionViewSource x:Key="MyMenuItems" Source="{Binding CustomerSymbols}" />
    </Menu.Resources>
    <!--  other code  -->
    <MenuItem Header="Symboler">
        <MenuItem.ItemsSource>
            <CompositeCollection>
                <CollectionContainer Collection="{Binding Source={StaticResource MyMenuItems}}" />
                <MenuItem Header="Test1" />
                <MenuItem Header="Test2" />
                <MenuItem Header="Test3" />
            </CompositeCollection>
        </MenuItem.ItemsSource>
    </MenuItem>
    <!--  other code  -->
</Menu>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM