【发布时间】:2015-12-29 23:57:01
【问题描述】:
我正在尝试在 WPF 中创建一个菜单/导航控件,该控件将用于多个应用程序。该控件旨在驻留在自定义窗口中,并将提供最大化、最小化、关闭、拖动等功能。除了标准的“窗口”功能外,控件还应该包含应用程序的主“菜单”——本质上是一组按钮,每个按钮都与命令和/或视图模型相关联——这些按钮也是自定义控件(派生从单选按钮)。
基本上,我的目标是能够通过 XAML 以这样的方式添加此菜单控件及其按钮(这是伪代码,要清楚):
<MenuControl Title="ApplicationTitle>
<MenuControl.MenuButtons>
<MenuButton Content="Button1" Command="Command1"/>
<MenuButton Content="Button2" Command="Command2"/>
</MenuControl.MenuButtons>
</MenuControl>
我已经到了我可以让这个只用一个按钮正常工作的地步。添加第二个按钮后,我会从 XAML 中收到“指定参数超出有效值范围”。
这是与我的自定义控件上的菜单相关的代码隐藏:
private static readonly DependencyProperty MenuProperty = DependencyProperty.Register("Menu", typeof(ObservableCollection<NavigationButton>), typeof(CCTNavigationHeader), new FrameworkPropertyMetadata(new ObservableCollection<NavigationButton>()));
public ObservableCollection<NavigationButton> Menu
{
get
{
return (ObservableCollection<NavigationButton>)GetValue(MenuProperty);
}
set
{
SetValue(MenuProperty, value);
}
}
这里是 XAML:
<ItemsControl ItemsSource="{Binding ElementName=ctlCCTNavigationHeader, Path=Menu}"/>
这是使用控件的代码,只有一个按钮:
<Controls:CCTNavigationHeader Title="Test">
<Controls:CCTNavigationHeader.Menu>
<Controls:NavigationButton Content="Test"/>
</Controls:CCTNavigationHeader.Menu>
</Controls:CCTNavigationHeader>
这是使用阻塞控件的代码,一旦我添加了第二个按钮:
<Controls:CCTNavigationHeader Title="Test">
<Controls:CCTNavigationHeader.Menu>
<Controls:NavigationButton Content="Test"/>
<Controls:NavigationButton Content="Test"/>
</Controls:CCTNavigationHeader.Menu>
</Controls:CCTNavigationHeader>
我知道我在这里一定做错了什么,但我无法在任何地方找到任何完成此类解决方案的示例。任何熟悉在 WPF 中创建自定义用户控件的人都可以为我指明正确的方向吗?
【问题讨论】:
标签: wpf xaml mvvm custom-controls