组合框 WPF C# 4.0 中的列表按钮控件

本文关键字:列表 按钮 控件 WPF 组合 | 更新日期: 2023-09-27 18:34:42

我正在尝试在WPF中实现可视化表单设计器。我有一个画布,用户可以在其中拖放一些控件(文本框,文本块,组合框,复选框,图像,按钮(。目前为止,一切都好。现在我正在尝试实现一个组合框,其中列出了用户在画布上放置的所有控件(就像VS 2008一样(。

组合框显示控件的"名称属性"。它适用于所有控件,除了按钮和复选框,我不知道为什么。组合框绑定到可观察集合,组合框的项目集合正确填充,但是当我选择按钮或复选框时,名称不会显示为选定项。所以这是我的绑定:

<ComboBox Name="comboBoxCurrentControls" IsEditable="false"
          ItemsSource="{Binding AllFormControls}" DisplayMemberPath="Name" 
          SelectedValuePath="Name"
          SelectedItem="{Binding Path=SelectedCtl, Mode=TwoWay}"

当您使用按钮在代码隐藏中简单地填充ObservableCollection<T>并在其上绑定组合框时,可以重现该问题。选择按钮时,组合框不会将按钮的名称显示为"选定项"。有人可以解释我这种行为或告诉我解决方法吗!?

提前致谢

克里斯

PS:我也尝试使用ObservableCollection<FrameworkElement>但没有帮助。

组合框 WPF C# 4.0 中的列表按钮控件

问题是按钮是一个内容控件,因此当选择按钮时,组合框的 SelectionBoxItem 使用 Content 属性而不是按钮本身。使用给定的绑定,然后尝试在内容上查找 Name 属性(我想这是一个字符串?这可以通过查看输出中的绑定错误来发现。您应该看到类似以下内容:

System.Windows.Data 错误:40:绑定表达式路径错误:"对象"字符串"(哈希代码=1231357559("上找不到"名称"属性。绑定表达式:路径=名称;DataItem='string' (hashCode=1231357559(;目标元素是"文本块"(名称="(;目标属性为"文本"(类型"字符串"(

如果使用 Snoop,则在单击"按钮"时,将看到 SelectionBoxItem 是按钮内容,而当您选择其他控件时,它是控件本身。

编辑:通过谷歌搜索,我遇到了这个:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/7054a9c9-fec1-463a-9568-b831729acd14