如何添加实现c ++接口的标签?

时间:2012-10-29 14:34:56

标签: c# c++ wpf

我的C#体验非常有限,所以也许这是一个常见的错误,但是,我找不到任何其他主题的答案。

在我的WPF应用程序中,我试图创建一个从默认WPF标签继承的标签,并实现一个在dll(托管c ++)中定义的接口。我的目标是将此对象的实例传递给c ++代码,并在不使用单独的线程的情况下更新UI。

using System;
using System.Windows.Controls;
using System.Windows;

namespace WPFTest
{
    //my class : default WPF Label, C++ interface (dll)
    class ObservationResultLabel : Label, IObservationResult
    {
        Boolean od;

        public Boolean ObjectIsDetected(){
            return od;
        }
        public void setObservationResult(Boolean od){
            this.od = od;
            this.Dispatcher.Invoke((Action)(() =>
            {
                this.InvalidateVisual();
            }));
        }
        protected override void  OnRender(
                System.Windows.Media.DrawingContext drawingContext){
            if (od){
                Visibility = Visibility.Visible;
            }else{
                Visibility = Visibility.Hidden;
            }
            base.OnRender(drawingContext);
        }
    }
}

但是在尝试构建时,我得到一个“类型'的值”ObservationResultLabel“无法添加到'UIElementCollection'类型的集合或字典中。”错误。如果我用C#接口尝试相同的事情,那就没有错误。

有没有人有任何建议?

2 个答案:

答案 0 :(得分:1)

开发WPF GUI的最简单方法是使用Model-View-ViewModel 模式。我建议不要将WPF元素传递给托管C ++库以更新其属性。也不建议覆盖OnRender()。我建议你看看一些WPF入门教程,例如this one。如果您要在WPF中进行开发,则需要熟悉“WPF思维方式”和WPF框架。

答案 1 :(得分:0)

我认为可能是C ++托管接口使用了c#或WPF无法使用的托管C ++语言功能,如果可以的话,尝试将[CLSCompliant]属性添加到c ++接口然后尝试编译并看看编译器说的是什么。我会考虑@HighCore所说的内容。