Silverlight ControlTemplate и F # - PullRequest
0 голосов
/ 24 мая 2010

Кто-нибудь имел какой-либо успех, включив Silverlight ControlTemplate в приложение F # Silverlight. Я пытаюсь добавить переходы к элементу Navgiation.Frame и следую примеру с C #: http://www.davidpoll.com/2009/07/19/silverlight-3-navigation-adding-transitions-to-the-frame-control

Загруженный источник использует опцию MSBUILD: Compile в шаблоне XAML, и файл включен как «Страница» ... ILDASM не показывает ни один объект, созданный для XAML;

В моем проекте я включил его как «Ресурс» (так же, как я сделал для своих страниц) и сослался на него в app.xaml:

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
             x:Class="Module1.MyApp">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/FSSilverlightApp;component/TransitioningFrame.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

TransitioningFrame.xaml выглядит следующим образом:

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
    xmlns:toolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Layout.Toolkit">
    <ControlTemplate x:Key="TransitioningFrame" TargetType="navigation:Frame">
        <Border Background="{TemplateBinding Background}"
                BorderBrush="{TemplateBinding BorderBrush}"
                BorderThickness="{TemplateBinding BorderThickness}"
                HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
            <toolkit:TransitioningContentControl Content="{TemplateBinding Content}"
                                                 Cursor="{TemplateBinding Cursor}"
                                                 Margin="{TemplateBinding Padding}"
                                                 HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                                 VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                                 HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                                                 VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
                                                 Transition="DefaultTransition" />
        </Border>
    </ControlTemplate>
</ResourceDictionary>

Все объекты моей страницы загружают свой соответствующий xaml с следующим кодом:

type Page1() as this =
    inherit UriUserControl("/FSSilverlightApp;component/Page1.xaml")
    do
        Application.LoadComponent(this, base.uri)

и где-нибудь в запуске приложения:

let p1 = new Page1()

У меня нет сопоставимой части для ControlTemplate - хотя я надеялся, что объект приложения и App.xaml вытянет его волшебным образом (кроме того, опора на эту магию привела к созданию 100% f # применение Silverlight довольно сложно - так как почти все опубликованные статьи, которые я нахожу, основаны на волшебниках и коротких путях - очень мало на реальной сантехнике - тьфу).

страница xaml ссылается на элемент управления через:

<StackPanel Grid.Row="3" Grid.Column="2" Name="mainPanel">
     <navigation:Frame Name="contentFrame" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"  Template="{StaticResource TransitioningFrame}"/>
</StackPanel>

Любые советы или рекомендации по этому вопросу приветствуются.


Согласно комментарию brians, я исследовал диагностику команды MSBUILD, и похоже, что она не делает ничего, кроме как включить ее в качестве ресурса:

Создание файла .resources: 'OBJ \ Debug \ TransitioningNavigation.g.resources' ... (TaskId: 14) Файл ресурса чтения: 'C: \ Users \ todd.brown \ Desktop \ TransitioningNavigation \ TransitioningNavigation \ Assets \ Styles.xaml' ... (TaskId: 14) Идентификатор ресурса "Активы / styles.xaml. (TaskId: 14)
Чтение ресурса: 'C: \ Users \ todd.brown \ Desktop \ TransitioningNavigation \ TransitioningNavigation \ Assets \ TransitioningFrame.xaml' ... (TaskId: 14) Идентификатор ресурса "Активы / transitioningframe.xaml. (TaskId: 14) * * тысяча тридцать два


Хорошо, одна интересная вещь заключается в том, что если я переименую ссылку на ContentTemplate xaml внутри App.xaml - приложение не загружается и выдает ошибку - так что я полагаю, что на страницу ссылаются и загружаются правильно. то есть это плохо

<ResourceDictionary Source="/FSSilverlightApp;component/TransitioningFrameBAD.xaml"/>

Ответы [ 2 ]

0 голосов
/ 28 апреля 2011

Ну, на самом деле я написал ControlTemplates в WPF 4.0, так что это должно в значительной степени работать и для Silverlight, проверьте приведенные ниже посты и источник git-hub, который я упомянул,

http://fadsworld.wordpress.com/2011/03/05/f-wpf-component-development/

Вы должны получить представление о том, как объявлять ресурсы, использовать их с шаблонами элементов управления, а также загружать шаблоны элементов управления в пользовательский элемент управления.Я также заставил BLEND работать таким образом.

Дайте мне знать, если вам нужна помощь.

Спасибо, Фахад

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

Может быть полезно перейти в командную строку и запустить

msbuild /t:clean
msbuild /v:diag > diagnostics.txt

и просмотреть журнал диагностики, чтобы выяснить, что такое Compile этого файла Xaml (с ResourceDictionary)делает под капотом ».Это может наводить на мысль о том, что делать для F #.

...