源自派生的WPF组合框不起作用

时间:2011-09-27 15:47:39

标签: c# wpf custom-controls

HOPEFULLY,WPF中有实力的人知道发生了什么......下面我采样的场景也适用于其他人,比如文本框,命令按钮等......

我正在玩创建自定义用户控件...例如:使用简单的Combobox。在一个项目类库LibA中,我创建了一些派生自... ex:TextBox,ComboBox,Window等的示例。第二个库LibB我正在创建另一个派生自ex:Combobox在LibA中的类...否则,没有问题....在C#WinForms中做了类似的事情没有问题。

现在,问题是,我将控件(从LibB)拖到应用程序的第一个“Window”(原生,因此没有派生问题),保存并运行。派生的库甚至没有命中它的构造函数,我只是简单的命令,只是测试它是否正在创建正常工作或不工作,但它不...在表单的XAML中,它正确引用两个命名空间项目,所以我知道这似乎是正确的。

所以,然后我在相同的原始LibA中创建了一个派生的组合框,将其放在表单上,​​并且IT正确地进入了构造函数。

以下是我发生的事情的片段。

namespace LibA
{
   public class MyCombo1 : ComboBox
   {
      public MyCombo1()
      {  ToolTip = "this is my base declaration"; } 
   }

   public class MyCombo1b : MyCombo1
   {
      public MyCombo1b() : base()
      {  ToolTip = "this constructor IS reached"; } 
   }
}

在单独的项目(库)中,

using FirstLibraryThatHas_MyCombo1
namespace LibB
{
   public class OtherLibCombobox : MyCombo1
   {
      public OtherLibCombobox() : base()
      {  ToolTip = "this version is NOT being recognized in the window"; } 
   }
}

所以,这些都不是视觉设计的,它们都只是代码...另外,我也用TextBox控件完成了,结果相同......它不会在调试器中停止..任何想法?

虽然我已从样本中更改了实际名称,但这是一个全新的窗口,一个带有原始类声明,一个带有DERIVED版本。这是一个完整的XAML测试窗口

<Window x:Class="MyProject.TestWindow"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   Title="TestWindow" Height="300" Width="300" 
   xmlns:my="clr-namespace:WPFGUI;assembly=WPFGUI" 
   xmlns:my1="clr-namespace:DerivedControls;assembly=DerivedControls">

  <Grid>
    <my:MyComboBoxClass
        Name="MyComboBoxInWindow" 
        HorizontalAlignment="Left" 
        Height="23" 
        Width="120" />

    <my1:cboDerivedComboClass
        Name="cboDerivedComboInWindow" 
        Height="23" 
        HorizontalAlignment="Left" 
        Width="120" />
  </Grid>
</Window>

2 个答案:

答案 0 :(得分:0)

我已尝试过但未能重现此问题。不过,我认为你有一个不同的问题。如果您使用上面的xaml - 第二个组合框将完全覆盖第一个 - 因此您将无法获得工具提示......

另外,请检查所有程序集是否针对相同的框架版本。

答案 1 :(得分:0)

这不是一个循环引用吗?

您调用另一个程序集中的MyDerivedControl,DerivedControl需要主程序集 因为它继承了你在那里定义的类型。 然后,您尝试在主程序集的窗口中显示它?

尝试清理并重建项目。

相关问题