覆盖一个UseControl's库

本文关键字:UseControl 一个 覆盖 | 更新日期: 2023-09-27 18:12:48

我想开发一个WPF用户控制库,它使用带有可以被重写的成员函数的类库。我使用的是c# 4.0和VS 2010。

我的测试类库看起来像:

using System.Diagnostics;
namespace MyLibrary {
  public class Foo {
    virtual public void Bar() {
      Debug.WriteLine(" Hi from MyLibrary, class Foo, method Bar.");
    }
  }
}

我的WPF用户控件看起来像:

using System.Windows.Controls;
using System.Diagnostics;
using MyLibrary;
namespace MyUserControl {
  public partial class UserControl1 : UserControl {
    public UserControl1() {
      InitializeComponent();
      Debug.WriteLine("MyUserControl: ");
      var foo = new Foo();
      foo.Bar();
    }
  }
}

我已经建立了一个WPF应用程序称为ProgramA,它看起来像:

using System;
using System.Diagnostics;
using System.Windows;
namespace ProgramA {
  public partial class MainWindow : Window {
    public MainWindow() {
      InitializeComponent();
    }
  }
}

在调试ProgramA时,您将看到:

MyUserControl: 
Hi from MyLibrary, class Foo, method Bar.

在调试输出窗口。到目前为止,一切顺利。

我还构建了ProgramB来尝试覆盖MyLibrary的Bar方法。程序b看起来像:

using System.Windows;
namespace ProgramB {
  public partial class MainWindow : Window {
    public MainWindow() {
      InitializeComponent();
    }
  }
}

ProgramA和ProgramB的XML都包含对MyUserControl的引用:

<Window x:Class="ProgramB.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        xmlns:my="clr-namespace:MyUserControl;assembly=MyUserControl">
    <Grid>
    <my:UserControl1 Name="userControl11"
                     HorizontalAlignment="Left"
                     VerticalAlignment="Top" />
  </Grid>
</Window>
我在ProgramB的项目中添加了一个名为NewFoo.cs的类,它看起来像:
using System.Diagnostics;
using MyLibrary;
namespace ProgramB {
  class NewFoo : MyLibrary.Foo{
    override public void Bar() {
      Debug.WriteLine(" Hi from ProgramB Foo, method Bar.");
    }
  }
}
ProgramB编译并运行,但是输出是:
MyUserControl: 
Hi from library Foo, method Bar.

覆盖无效。

问题在这里。ProgramB的Foo方法的命名空间是ProgramB,因此它不会覆盖MyLibrary的Bar方法。

是否有一种方法ProgramB可以覆盖由MyUserControl使用的Bar方法?

任何帮助或建议都将非常感谢。查尔斯。

覆盖一个UseControl's库

这是因为UserControl1不知道NewFoo,只实例化了Foo。它与名称空间无关。

重写将工作,只要你提供正确的实例。

你应该在UserControl1中公开一个属性,在那里你可以设置foo使用什么

相关文章:
  • 没有找到相关文章