Пользовательский элемент управления Silverlight в F # DefaultStyleKey - PullRequest
0 голосов
/ 18 мая 2010

Хотите знать, как выполнить установку стиля xaml с кодом в F #. Код достаточно прост:

this.DefaultStyleKey <- typeof<MyControl>

В проекте C # параметры сборки позволяют пометить XAML как команду пользовательской сборки ресурса: MSBuild: Compile

Я не вижу его на панели свойств, поэтому я попытался добавить его вручную в файл проекта ...

Есть идеи? Приложение загружается - пользовательский элемент управления не выводится (но код выполняется).

Спасибо

UPDATE:

Я проверил манифесты, и ресурс был включен, как и ожидалось, между моим проектом и портируемым проектом ... В поисках следующего шага.

ОБНОВЛЕНИЕ 2:

Что ж, он может быть включен в манифест ОК, но он не "компилируется", поскольку версия проекта на C # выдает ошибку в процессе сборки, когда я искажаю XML, а версия F # позволяет искаженному XML внесены в приложение.

ОБНОВЛЕНИЕ 3:

Загрузка XAML теперь в порядке (я думаю), однако у меня возникли некоторые проблемы со свойствами элемента управления:

 static member ItemsProperty : DependencyProperty = 
        DependencyProperty.Register(
            "Items",
            typeof<MyMenuItemCollection>,
            typeof<MyMenu>,
            null);

 member this.Items
        with get () : MyMenuItemCollection = this.GetValue(MyMenu.ItemsProperty) :?> MyMenuItemCollection
        and set (value: MyMenuItemCollection) = this.SetValue(MyMenu.ItemsProperty, value);

Проблема возникает при доступе:

for menuItem in this.Items do
    let contentElement: FrameworkElement = menuItem.Content

где я получаю исключение нулевого указателя на this.Items; однако я инициализировал его в конструкторе:

do
    this.Items <- new CoolMenuItemCollection()

1 Ответ

0 голосов
/ 18 мая 2010

Стиль компиляции файлов XAML в C # не поддерживается инструментами F # для Visual Studio, поэтому нет способа получить такое же поведение, как в C #. Я думаю, у вас есть два варианта:

  • Создание проекта C # с файлами XAML и справочной библиотекой F #, которая реализует основные функции (или справочная библиотека C # из F # и загрузка пользовательского интерфейса из библиотеки C # в приложении F #)

  • Используйте объект XamlReader ( см. MSDN ) и программно загрузите файл XAML (встроенный в ресурсы простым способом). Вы не получите никаких сгенерированных C # -компилятором функций (например, именованные свойства для всех объектов с x:Name), но в остальном он должен работать обычным образом.

...