コードでXAMLカスタムコントロールを作成するにはどうすればよいですか?

IInspectable

C ++ / WinRTを使用して、カスタムXAMLコントロールをコードに実装しようとしています。しかし、私の試みた実装はコンパイルに失敗しました。概念実証として、私はこのコードを使用していました。

#pragma once

#include <winrt/Windows.UI.Xaml.Controls.h>

namespace MyApp
{
    struct MyControl : winrt::implements<MyControl, winrt::Windows::UI::Xaml::Controls::Control>
    {
    };
}

これにより、次のコンパイラエラーが発生しました。

1>MyControl.cpp
1>c:\program files (x86)\windows kits\10\include\10.0.17134.0\cppwinrt\winrt\base.h(6416): error C2079: 'winrt::impl::producer<D,winrt::Windows::UI::Xaml::Controls::Control,void>::vtable' uses undefined struct 'winrt::impl::produce<D,I>'
1>        with
1>        [
1>            D=MyApp::MyControl
1>        ]
1>c:\program files (x86)\windows kits\10\include\10.0.17134.0\cppwinrt\winrt\base.h(7163): note: see reference to class template instantiation 'winrt::impl::producer<D,winrt::Windows::UI::Xaml::Controls::Control,void>' being compiled
1>        with
1>        [
1>            D=MyApp::MyControl
1>        ]
1>c:\xxx\mycontrol.h(8): note: see reference to class template instantiation 'winrt::implements<MyApp::MyControl,winrt::Windows::UI::Xaml::Controls::Control>' being compiled

コンパイラエラーを理解できません。どうやら、Windowsランタイムで使用する他のタイプを実装するのと同じ方法でXAMLコントロールを実装することはできません。

XAMLカスタムコントロールをコードに実装するには何が必要ですか?

ライアン・シェパード

WinRTの「継承」または「サブクラス化」は、C ++の継承とは微妙に異なります。これらはCOMインターフェイスであるため、WinRTランタイムクラスをサブクラス化する場合、実際に実行しているのはCOM集約であり、基本タイプのオーバーライド可能なインターフェイスの実装と組み合わされていますCOM集約の側面により、これは標準のC ++継承よりもかなり面倒であり、すべての委任/非委任、特別な構築などがあります。これはWRLの大きな問題ですが、C ++ / CXは以下のコンパイラマジックを実行しました。これを抽象化するためのフード。幸い、C ++ / WinRTは、目に見えない魔法に頼ることなく、2種類の抽象化を提供するのに役立ちます。

外部から表示する必要のないタイプ(ランタイムコンポーネントではなくアプリなど)を作成している場合、C ++ / WinRTはこれに便利なヘルパーを提供します。

#pragma once

#include <winrt/Windows.UI.Xaml.Controls.h>

namespace MyApp
{
    struct MyControl : winrt::Windows::UI::Xaml::Controls::ControlT<MyControl>
    {
        void OnTapped(winrt::Windows::UI::Xaml::Input::TappedRoutedEventArgs const&);
    };
}

この基本型ControlTは、集約された基本Controlインスタンスを正しく構築し、基本メソッドをそれに委任すると同時に、「オーバーライド可能な」インターフェースを実装します。これらのオーバーライド可能なメソッドにはすべて、デフォルトで基本メソッドを呼び出すプレースホルダー実装が与えられていますが、自分でオーバーライドしてカスタム動作を取得することもできます。

一方、IDLを介して、投影される型を作成する必要がある場合は、次のようにします。

namespace MyApp
{
  [default_interface]
  runtimeclass MyControl : Windows.UI.Xaml.Controls.Control
  {
    MyControl();
  };
}

これControlTにより、上記の組み込みの場合と同様のスキャフォールディングが生成されますが、タイプも投影されます。実際、このタイプ(この例ではMyControl.gh)について生成されたファイルを調べると、MyControlTすべてが接続されている場所がわかります

(注:この[default_interface]属性は、空の、構築可能な、封印されたランタイムクラスがある場合にのみ必要です。メンバーを追加すると、midlは、他の同軸化なしでデフォルトのインターフェースを合成します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

カスタムUITableView更新コントロールを作成するにはどうすればよいですか?

分類Dev

テキストをカスタムXAMLコントロールにバインドするにはどうすればよいですか?

分類Dev

xaml内のC#で記述されたカスタムコントロールを継承するにはどうすればよいですか?

分類Dev

カスタムDataGridコントロールのXAMLでGroupDescriptionsを指定するにはどうすればよいですか?

分類Dev

XAMLで別のカスタムコントロール基本クラスを使用して、WPFでビュー内のカスタムコントロールをインスタンス化するにはどうすればよいですか?

分類Dev

UWPでカスタムピッカーコントロールを作成するにはどうすればよいですか?

分類Dev

Mapboxglでイベントを使用してカスタムコントロールを作成するにはどうすればよいですか?

分類Dev

JavaFXでカスタム折れ線グラフコントロールを作成するにはどうすればよいですか?

分類Dev

角度2+でカスタムローディングボタンコンポーネントを作成するにはどうすればよいですか?

分類Dev

カスタムコントロールでスクロールバーをうまく再生するにはどうすればよいですか?

分類Dev

ターミナル コマンド プロンプトの最初にカスタム形状を追加するにはどうすればよいですか?

分類Dev

カスタムコードを使用してMagentoで作成するにはどうすればよいですか?

分類Dev

jOOQのMockDataProviderでサンプルデータを使用してカスタムレコードを作成するにはどうすればよいですか?

分類Dev

WebViewでズームコントロールを作成するにはどうすればよいですか?

分類Dev

Facebookのようにカスタムコンタクトグループを作成するにはどうすればよいですか?

分類Dev

jooqカスタムレコードを作成するにはどうすればよいですか?

分類Dev

Xamarinフォームでカスタムコントロールをフロートさせるにはどうすればよいですか?

分類Dev

カスタムistio入力ゲートウェイコントローラーを作成するにはどうすればよいですか?

分類Dev

再利用可能なコンテキストに依存しないXAMLコードブロックを作成するにはどうすればよいですか?

分類Dev

カスタム値のOdooでコントローラーを作成するにはどうすればよいですか?

分類Dev

SAP UIのコントローラーでカスタムコントローラーを定義するにはどうすればよいですか?

分類Dev

Angularでカスタムフォームコントロールをリセットするにはどうすればよいですか?

分類Dev

ストーリーボードで、複数のコントローラーで使用するカスタムセルを作成するにはどうすればよいですか?

分類Dev

スタイル付きコンポーネントを使用してカスタム属性名を作成するにはどうすればよいですか?

分類Dev

ココア(OS X)でプログラムでカスタムのツールチップを作成するにはどうすればよいですか?

分類Dev

カスタムリストをリストビューコントロールに追加するにはどうすればよいですか?

分類Dev

WPFを使用せずにSilverlight5でgeneric.xamlを使用してカスタムコントロールを作成するにはどうすればよいですか?

分類Dev

Xamarinカスタムコントロール、Xcodeパネルに表示するプロパティを追加するにはどうすればよいですか?

分類Dev

カスタムスライドアップメニューからコントローラーを表示するにはどうすればよいですか

Related 関連記事

  1. 1

    カスタムUITableView更新コントロールを作成するにはどうすればよいですか?

  2. 2

    テキストをカスタムXAMLコントロールにバインドするにはどうすればよいですか?

  3. 3

    xaml内のC#で記述されたカスタムコントロールを継承するにはどうすればよいですか?

  4. 4

    カスタムDataGridコントロールのXAMLでGroupDescriptionsを指定するにはどうすればよいですか?

  5. 5

    XAMLで別のカスタムコントロール基本クラスを使用して、WPFでビュー内のカスタムコントロールをインスタンス化するにはどうすればよいですか?

  6. 6

    UWPでカスタムピッカーコントロールを作成するにはどうすればよいですか?

  7. 7

    Mapboxglでイベントを使用してカスタムコントロールを作成するにはどうすればよいですか?

  8. 8

    JavaFXでカスタム折れ線グラフコントロールを作成するにはどうすればよいですか?

  9. 9

    角度2+でカスタムローディングボタンコンポーネントを作成するにはどうすればよいですか?

  10. 10

    カスタムコントロールでスクロールバーをうまく再生するにはどうすればよいですか?

  11. 11

    ターミナル コマンド プロンプトの最初にカスタム形状を追加するにはどうすればよいですか?

  12. 12

    カスタムコードを使用してMagentoで作成するにはどうすればよいですか?

  13. 13

    jOOQのMockDataProviderでサンプルデータを使用してカスタムレコードを作成するにはどうすればよいですか?

  14. 14

    WebViewでズームコントロールを作成するにはどうすればよいですか?

  15. 15

    Facebookのようにカスタムコンタクトグループを作成するにはどうすればよいですか?

  16. 16

    jooqカスタムレコードを作成するにはどうすればよいですか?

  17. 17

    Xamarinフォームでカスタムコントロールをフロートさせるにはどうすればよいですか?

  18. 18

    カスタムistio入力ゲートウェイコントローラーを作成するにはどうすればよいですか?

  19. 19

    再利用可能なコンテキストに依存しないXAMLコードブロックを作成するにはどうすればよいですか?

  20. 20

    カスタム値のOdooでコントローラーを作成するにはどうすればよいですか?

  21. 21

    SAP UIのコントローラーでカスタムコントローラーを定義するにはどうすればよいですか?

  22. 22

    Angularでカスタムフォームコントロールをリセットするにはどうすればよいですか?

  23. 23

    ストーリーボードで、複数のコントローラーで使用するカスタムセルを作成するにはどうすればよいですか?

  24. 24

    スタイル付きコンポーネントを使用してカスタム属性名を作成するにはどうすればよいですか?

  25. 25

    ココア(OS X)でプログラムでカスタムのツールチップを作成するにはどうすればよいですか?

  26. 26

    カスタムリストをリストビューコントロールに追加するにはどうすればよいですか?

  27. 27

    WPFを使用せずにSilverlight5でgeneric.xamlを使用してカスタムコントロールを作成するにはどうすればよいですか?

  28. 28

    Xamarinカスタムコントロール、Xcodeパネルに表示するプロパティを追加するにはどうすればよいですか?

  29. 29

    カスタムスライドアップメニューからコントローラーを表示するにはどうすればよいですか

ホットタグ

アーカイブ