WinRT 继承和通用代码

WinRT inheritance and common code

本文关键字:代码 继承 WinRT      更新时间:2023-10-16

我想从几个 WinRT 组件中提取公共代码到一个基类,这样我就不需要复制和粘贴它。我有以下基类:

[Windows::Foundation::Metadata::WebHostHidden]
ref class ExpandableView : public Windows::UI::Xaml::DependencyObject
{
public:
    static void onIsExpandedChanged(Windows::UI::Xaml::DependencyObject^ object, 
        Windows::UI::Xaml::DependencyPropertyChangedEventArgs^ arguments);
public:
    property bool IsExpanded
    {
        bool get(){return (bool)GetValue(IsExpandedProperty);}
        void set(bool value){SetValue(IsExpandedProperty, value);}
    }
    static property Windows::UI::Xaml::DependencyProperty^ IsExpandedProperty
    {
        Windows::UI::Xaml::DependencyProperty^ get(){return  _IsExpandedProperty;}
    }
protected:
    ExpandableView();
    virtual void viewExpanded();
    virtual void viewCollapsed();
private:
    void _expand();
    void _collapse();
private:
    static Windows::UI::Xaml::DependencyProperty^ _IsExpandedProperty;
};

我创建了一些用户控件,这些控件应该以某种方式从这个基类继承。而且不可能按照我想要的方式做到这一点,因为 winrt 类只能继承一个 ref 类,而其他应该是接口。但是我需要这个具有依赖属性的类,该属性在设置时具有一些逻辑,并且我不想在所有类中复制和过去此属性。所以问题是:如何使用 WinRT 实现它?

您是否尝试过使用模板和所需特定类的继承:

template<typename BaseClass>
ref class ExpandableView : public BaseClass;

现在重用ExpandableView的子类可以继承它们需要的任何内容,而不仅仅是Windows::UI::Xaml::DependencyObject