类似于SelectedItem的东西,但菜单项?

时间:2014-12-17 10:59:14

标签: c# wpf xaml

(我的英语废话,我希望它没关系)

我有类似于组合框的东西,但它是一个" menuItem组合框"。 我试图创建一个动态菜单项,显示"历史"动态的对象。

我的代码存在问题,我无法获取我点击的项目的名称..

这是我的wpf,你可以看到Click =" myList_Click&#34 ;;它是触发器:

<Menu HorizontalAlignment="Left" Height="30" VerticalAlignment="Top" Width="525" IsMainMenu="True">
                <MenuItem Header="Menu" x:Name="myList" Click="myList_Click">
                    <MenuItem.ItemContainerStyle>
                        <Style>

                            <Setter Property="MenuItem.Header" Value="{Binding name}"/>

                        </Style>
                    </MenuItem.ItemContainerStyle>
                </MenuItem>
</Menu>

以下是MainWindow.cs的一部分:

 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;
    }

 private void myList_Click(object sender, RoutedEventArgs e)
    {
        DependencyObject obj = (DependencyObject)e.OriginalSource;
        while (obj != null && obj != myList)
        {

            if (obj.GetType() == typeof(MenuItem))
            {
                MessageBox.Show(myList.SelectedItem.ToString());   
                break;
            }
            obj = VisualTreeHelper.GetParent(obj);
        }
    }

最后,我的简单课程&#34;历史&#34;

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;
    }

}

我想到了SelectedItem,但它不起作用,我的MenuItem类并不存在SelectedItem。我为我的MenuItem尝试了一些方法,但没有给我任何有用的东西。

我想点击一个menuitem,然后显示它的名字。 (例如:当我点击guy1时,会出现一个弹出窗口并显示&#34; Guy1&#34;)。

enter image description here

我需要这个String来稍后操作我的软件。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

试试这个:

    private void myList_Click(object sender, RoutedEventArgs e)
    {
        MessageBox.Show((e.OriginalSource as MenuItem).Header.ToString());
    }