是否有人成功将Silverlight ControlTemplate整合到F#Silverlight应用程序中。我正在尝试向Navgiation.Frame元素添加转换,然后继续使用C#示例:http://www.davidpoll.com/2009/07/19/silverlight-3-navigation-adding-transitions-to-the-frame-control
下载的源使用模板XAML上的MSBUILD:Compile选项,该文件作为“页面”包含在内...... 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)
在app启动的某个地方:
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>
对此主题的任何建议或想法表示赞赏。
Per brians发表评论,我研究了MSBUILD命令诊断,除了将它作为资源包含之外,它看起来并不像以前那样:
生成.resources文件: 'OBJ \调试\ TransitioningNavigation.g.resources' ... (TaskId:14)读取资源文件: 'C:\用户\ todd.brown \桌面\ TransitioningNavigation \ TransitioningNavigation \资产\ Styles.xaml' ... (TaskId:14)资源ID是 资产/ styles.xaml“。 (TASKID:14)
阅读资源文件: 'C:\用户\ todd.brown \桌面\ TransitioningNavigation \ TransitioningNavigation \资产\ TransitioningFrame.xaml' ... (TaskId:14)资源ID是 资产/ transitioningframe.xaml“。 (TASKID:14)
一个有趣的事情是,如果我在App.xaml的内部重命名ContentTemplate xaml的引用 - 应用程序deos not load并抛出错误 - 所以我猜这个页面正在被引用和正确加载。即这很糟糕
<ResourceDictionary Source="/FSSilverlightApp;component/TransitioningFrameBAD.xaml"/>
答案 0 :(得分:0)
转到命令行并运行
可能很有用msbuild /t:clean
msbuild /v:diag > diagnostics.txt
并检查诊断日志,找出'Xaml文件的Compile
(ResourceDictionary
)在幕后做什么'。这可能暗示了如何为F#做些什么。
答案 1 :(得分:0)
好吧,我实际上是在WPF 4.0中编写了ControlTemplates,所以这对Silverlight也很有用,请查看下面的帖子和我提到的git-hub源代码,
http://fadsworld.wordpress.com/2011/03/05/f-wpf-component-development/
您应该了解如何声明资源,将它们与控件模板一起使用以及在自定义控件中加载控件模板。我也让BLEND以这种方式工作。
如果您需要任何帮助,请告诉我。
谢谢, 法赫德