如何添加实现C 接口的标签

How to add a label that implements a c++ interface?

本文关键字:接口 标签 实现 何添加 添加      更新时间:2023-10-16

我的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#接口尝试同一件事,则没有错误。

有人有任何建议吗?

开发WPF GUI的最简单方法是使用Model-View-ViewModel模式。我建议将WPF元素传递到托管的C 库中,以更新其属性。也不建议覆盖OnRender()。我建议您查看一些WPF介绍性教程,例如这个。如果您要在WPF中开发,则需要熟悉" WPF思维方式"和WPF框架。

我认为可能是C 托管接口正在使用托管的C 语言功能,而C#或WPF不可用,请尝试在您的C 接口中添加[ClScompliant]属性可以然后尝试编译并查看编译器所说的话。我也要考虑@highcore所说的话。