C#WPF Frame-> UserControl-> Usercontrol Loaded事件不会触发

时间:2014-01-18 10:55:39

标签: c# wpf

我是WPF新手并遇到问题我似乎无法找到解决方案。

我正在写一个G19(键盘)小程序。此键盘附有320x240显示器,您可以使用C#进行访问。

我正在使用WPF,因为我不再需要进行任何GDI绘图,而是使用普通控件。

因此。它按我的意愿工作。除了一个UserControl之外,一切都正确绘制。我已下载此控件 - > http://marqueedriproll.codeplex.com/

在设计器中,控件工作,Loaded事件被触发,动画很好。 当我运行我的应用程序时,我只看到标签和文本。动画不起作用,并且Loaded事件不再触发。

感谢任何帮助。

主要功能是我的包装器。包装器已经是Usercontrol并显示可切换的插件。这个包装器有Frame Control(Wrapper1)。每次切换插件时,我都会替换此框架的内容。

    public void SetPlugin(IPlugin plugin)
    {
        if (this.MainPlugin != null)
        {
            this.MainPlugin.OnHide();
            ((UserControl)this.MainPlugin).Visibility = System.Windows.Visibility.Hidden; 
        }

        this.MainPlugin = plugin;
        ((UserControl)this.MainPlugin).Visibility = System.Windows.Visibility.Visible;

        this.MainPlugin.OnShow(); 

        this.Wrapper1.Content = this.MainPlugin;
    }

我认为以这种方式处理插件系统是正确的方法。插件得到了我的键盘。

我不明白为什么usercontrol只能在设计器视图中工作,而不能在正在运行的应用程序中工作。

滚动标签的基本代码是:

    public MarqueeText()
    {
        this.Loaded += new RoutedEventHandler(MarqueeText_Loaded);

        InitializeComponent();
        canMain.Height = this.Height;
        canMain.Width = this.Width;
    }

    void MarqueeText_Loaded(object sender, RoutedEventArgs e)
    {
        StartMarqueeing(_marqueeType);
    }

我没有看到它不起作用的原因。实际上我总是找到解决问题的方法,但这次我什么都没看到。

提前致谢。今天真的需要你的帮助。 周六愉快! :)

1 个答案:

答案 0 :(得分:0)

我猜你要渲染到位图目标,而不是屏幕上。如果您使用的是RenderTargetBitmap,那么您有几项责任。您需要设置两个演示文稿源,并确保在调度程序上运行事件。

通常情况下,App.xamlApplication.Run会为您执行此操作,但如果您不使用Window,则可以自行执行此操作。

有关详细信息,请参阅this related question