【问题标题】:List Button Control in Combobox WPF C# 4.0组合框 WPF C# 4.0 中的列表按钮控件
【发布时间】:2012-05-27 17:03:32
【问题描述】:

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

组合框显示控件的名称属性。它适用于除按钮和复选框之外的所有控件,我不知道为什么。 Combobox 绑定到 ObservableCollection 并且 Combobox 的 Item Collection 填充正确,但是当我选择 Button 或 Checkbox 时,名称不显示为 SelectedItem。所以这是我的绑定:

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

当您在 Codebehind 中使用 Buttons 简单地填充 ObservableCollection&lt;T&gt; 并在其上绑定一个 Combobox 时,您可以重现该问题。当您选择它时,组合框不会将按钮的名称显示为 SelectedItem。 有人可以向我解释这种行为或告诉我解决方法吗!?

提前致谢

克里斯

P.s:我也尝试使用ObservableCollection&lt;FrameworkElement&gt;,但没有帮助。

【问题讨论】:

  • 显示什么而不是名称?
  • 什么都没有。它只是空的......但是当组合框展开时,按钮/复选框的名称在列表中。
  • 能否提供设置SelectedCtl的代码
  • 它只是 ViewModel 类中的一个属性,当用户单击控件时设置。

标签: c# wpf data-binding button combobox


【解决方案1】:

The problem is that Button is a ContentControl so when the button is selected, the ComboBox's SelectionBoxItem uses the Content property rather than the Button itself.使用给定的绑定,然后尝试在内容上找到 Name 属性(我想这是一个字符串?)。这可以通过查看绑定错误的输出来发现。您应该会看到如下内容:

System.Windows.Data 错误:40:BindingExpression 路径错误:在“对象”“字符串”(HashCode=1231357559)上找不到“名称”属性。绑定表达式:路径=名称; DataItem='String' (HashCode=1231357559);目标元素是'TextBlock'(名称='');目标属性是“文本”(类型“字符串”)

如果你使用 Snoop,当你点击按钮时,你会看到 SelectionBoxItem 是按钮内容,而当你选择不同的控件时,它是控件本身。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多