Передача элементов пользовательского интерфейса в и из компонентов среды выполнения Windows в разных средах?

Интересно, есть ли способ создать компонент времени выполнения (написанный на C#, например), который позволяет работать с элементами пользовательского интерфейса из разных сред.

Например, я хотел бы добавить элемент пользовательского интерфейса, такой как MediaElement к данному Panel (C#) или div (Javascript).

Могу ли я вызвать метод во время выполнения компонента, как это: cmpt.setPlayer((Panel) playerParent); (C#) и cmpt.setPlayer(getElementByClass('.playerParent')); (Javascript). Это возможно как-то?

Если нет (и я бы полностью это понял), есть ли способ создать один компонент времени выполнения, который предлагает, скажем, два способа объявления функции, один для вызова из C# и один для Javascript?

1 ответ

Решение

На самом деле невозможно совместно использовать элементы пользовательского интерфейса между механизмом рендеринга HTML/CSS (приложение JS) и компонентом C#/C++. В коде C# не будет базовой среды выполнения, которая понимает объект HTML-элемента. Точно так же UIElement из XAML не будет иметь никакого смысла для движка HTML/CSS в приложении JS. Короче говоря, элементы пользовательского интерфейса не могут быть разделены через эту границу, и, таким образом, компоненты среды выполнения Windows предназначены для функциональных возможностей не-пользовательского интерфейса.

На ваш второй вопрос, компоненты не структурированы так, чтобы делать то, что вы предлагаете, то есть иметь отдельные методы C# и JS, потому что вы не можете реализовать компонент в JavaScript для начала. Идея состоит в том, что метод, написанный на C# или C++, проецируется в JavaScript во время выполнения, но он все еще реализован на этих языках.

Люди, которые разрабатывают библиотеки, связанные с пользовательским интерфейсом для приложений Магазина Windows, обычно реализуют отдельные версии для C#/C++ и для JS из-за этих различий. Конечно, вещи, не относящиеся к пользовательскому интерфейсу, могут входить в его собственный компонент WinRT, и я думаю, что у вас может быть библиотека JS, добавляющая вещи в пространство имен, поступающее из компонента, потому что последний проецируется в JS как объект JS, как и любой другой. Такой гибридный подход будет держать вашу поверхность API в одном пространстве имен, даже если он имеет смешанную реализацию. Я не пробовал это все же.

Альтернативный подход может заключаться в том, чтобы компонент WinRT использовал различные обратные вызовы для инструктирования хост-приложения выполнять задачи пользовательского интерфейса, что обязательно должно включать создание элементов пользовательского интерфейса. Компонент может управлять параметрами и базовой моделью данных, то есть использовать эти обратные вызовы, чтобы соответствующим образом инициировать работу пользовательского интерфейса.

Стоит отметить, что в главе 18 моей бесплатной электронной книги " Программирование приложений для Магазина Windows с использованием HTML, CSS и JavaScript, 2-е издание" я провел довольно исчерпывающую обработку компонентов WinRT, в том числе асинхронных.

Другие вопросы по тегам