1

我正在尝试制作一个与 Microsoft Office 中的样式相同的简单菜单:

示例截图
(来源:techairlines.com

我曾尝试将 aListBox作为菜单,但似乎无法将每个 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 的其余部分,我在使用控件时遇到错误,但我猜这是由于上述错误。

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

4

1 回答 1

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 的命名空间,前缀如窗口中的控件或用户控件,如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>

我希望这能让你继续前进。

于 2012-07-05T22:42:24.487 回答