在xaml中使用ItemsSource的动态MenuItem?

时间:2014-12-16 17:53:44

标签: c# wpf visual-studio-2013 menuitem itemssource

我是英国人,所以抱歉..

我正在尝试创建基于集合(对象列表)显示内容的动态菜单项,这是我的xaml,您可以看到“ListBox”和“MenuItem”。

正如我所说,我将标题绑定到我的对象的“名称”:

MainWindow.xaml

<Grid Margin="0,0,-8,-9" Background="Black" >

    <DockPanel x:Name="LayoutRoot">
        <Grid VerticalAlignment="Top">
            <MediaElement x:Name="mediaElement" HorizontalAlignment="Center"  Margin="0,0,60,30" VerticalAlignment="Top" MouseLeftButtonUp="mediaElement_MouseLeftButtonUp">

            </MediaElement>
            <Menu HorizontalAlignment="Left" Height="30" VerticalAlignment="Top" Width="525" IsMainMenu="True">
                <MenuItem Header="Menu">
                    <ListBox x:Name="myList" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="461,-261,-1,106" Background="#FFFFE800" MouseDoubleClick="ListBox_Double_Click" Width="57">
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <Grid>

                                    <MenuItem Header="{Binding name}"> </MenuItem>

                                </Grid>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>
                </MenuItem>
            </Menu>
        </Grid>

这是我在c#中的代码,你可以看到我将“myList”(这是我的ListBox)与列表的ItemsGetSource绑定(其中包含我要在菜单中显示的内容) ):

public MainWindow()
{
    var list = new List<History>
    {
        new History() { name = "Guy1"},
        new History() { name = "Guy2"},
        new History() { name = "Guy3"},
        new History() { name = "Guy4"},
    };

    InitializeComponent();

    this.myList.ItemsSource = list;
}

我的课程“历史”(“名称”字段是我想要显示的内容)

namespace MediaPlayer
{
    public class History
    {
        // "prop" puis "tab"
        public String name { get; set; }
        public String path { get; set; }
        public int time { get; set; }

        public override string ToString()
        {
            return name;
        }
    }
}

我想我不能将itemSource用于我的menuItems,也许?

1 个答案:

答案 0 :(得分:2)

以下是仅使用MenuItems的示例:

<强> MainWindow.xaml

<Grid Margin="0,0,-8,-9" Background="Black" >
    <DockPanel x:Name="LayoutRoot">
        <Grid VerticalAlignment="Top">
            <MediaElement x:Name="mediaElement" HorizontalAlignment="Center"  Margin="0,0,60,30" VerticalAlignment="Top" MouseLeftButtonUp="mediaElement_MouseLeftButtonUp">

            </MediaElement>
            <Menu HorizontalAlignment="Left" Height="30" VerticalAlignment="Top" Width="525" IsMainMenu="True">
                <MenuItem Header="Menu" x:Name="myList">
                    <MenuItem.ItemContainerStyle>
                        <Style>
                            <Setter Property="MenuItem.Header" Value="{Binding name}"/>
                        </Style>
                    </MenuItem.ItemContainerStyle>
                </MenuItem>
            </Menu>
        </Grid>
    </DockPanel>
</Grid>

结果如下:

enter image description here