制作一个列表框菜单

时间:2012-07-05 21:43:03

标签: c# wpf xaml

我试图制作一个简单的菜单,风格与Microsoft Office中的菜单相同:

example screenshot http://s.techairlines.com/wp-content/uploads/2009/11/Office-Share.jpg

我尝试使用ListBox作为菜单,但我似乎无法将每个listboxitem绑定到不同的面板。是否有捷径可寻?如果有人能给出一些指示或指向我的一些教程,我将非常感激。我觉得我在网上到处都搜索过。


我有一些问题。我在c#中使用了Silvermind的代码并添加了一个事件:

    [ContentProperty("Content")]
public class ModelForMyListBox : INotifyPropertyChanged
{
    private string title;
    private object content;
    public string Title
    {
        get { return title; }
        set
        {
            if (value == title)
                return;
            title = value;
            OnPropertyChanged("Title");
        }
    }
    public object Content
    {
        get { return content; }
        set
        {
            if (value == content)
                return;
            content = value;
            OnPropertyChanged("Content");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
            handler(this, new PropertyChangedEventArgs(propertyName));
    }
}

在XAML中,添加此内容时出错。

xmlns:controls="clr-namespace:WpfApplication1.Controls"

" WpfApplication1.Controls"未包含在程序集中

至于XAML的其余部分,我在使用控件时遇到错误,但我想这是由于上述错误。

希望你能帮助我纠正最后一次?

1 个答案:

答案 0 :(得分:0)

最简单的方法是:

[ContentProperty("Content")]
public class ModelForMyListBox : INotifyPropertyChanged
{
    private string title;
    private object content;
    public string Title
    {
        get { return title; }
        set
        {
            if (value == title)
                return;
            title = value;
            OnPropertyChanged("Title");
        }
    }
    public object Content
    {
        get { return content; }
        set
        {
            if (value == content)
                return;
            content = value;
            OnPropertyChanged("Content");
        }
    }
}

在窗口或用户控件中添加ModelForMyListBox的名称空间,其前缀类似于controls 比如xmlns:controls="clr-namespace:Application1.Controls"

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="1*"/>
    </Grid.ColumnDefinitions>
    <ListBox x:Name="MenuListBox" DisplayMemberPath="Title">
        <controls:ModelForMyListBox Title="Share">
            <!-- <MyCustomViewObject here -->
        </controls:ModelForMyListBox>
        <controls:ModelForMyListBox Title="Help">
            <!-- <MyCustomViewObject here -->
        </controls:ModelForMyListBox>
    </ListBox>
    <ContentPresenter Grid.Column="1" 
                      DataContext="{Binding ElementName=MenuListBox, Path=SelectedItem}"
                      Content="{Binding Path=Content}"/>
<Grid>

我希望你得到这个。