[英]Silverlight ControlTemplate and F#
是否有人成功将Silverlight ControlTemplate集成到F#Silverlight应用程序中。 我正在尝试将过渡添加到Navgiation.Frame元素,然后再添加一个C#示例: http ://www.davidpoll.com/2009/07/19/silverlight-3-navigation-adding-transitions-to-the -框架控制
下载的源代码使用模板XAML上的MSBUILD:Compile选项,并且该文件作为“页面”包含在内。ILDASM不显示为XAML创建的任何对象;它只显示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)资源ID为'assets / styles.xaml'。 (TaskId:14)
读取资源文件:'C:\\ Users \\ todd.brown \\ Desktop \\ TransitioningNavigation \\ TransitioningNavigation \\ Assets \\ TransitioningFrame.xaml'...(TaskId:14)资源ID为'assets / transitioningframe.xaml'。 (TaskId:14)
好一件有趣的事情是,如果我将对App.xaml的ContentTemplate xaml索引的引用重命名,则该应用程序将不会加载并引发错误-因此我猜该页面已被正确引用和加载。 即这很糟糕
<ResourceDictionary Source="/FSSilverlightApp;component/TransitioningFrameBAD.xaml"/>
转到命令行并运行可能会很有用
msbuild /t:clean
msbuild /v:diag > diagnostics.txt
并检查诊断日志以找出“该Xaml文件(使用ResourceDictionary
)在后台进行的Compile
”。 这可能暗示了对F#做什么。
好吧,我实际上是在WPF 4.0中编写ControlTemplates的,所以这对于Silverlight来说也应该很有效,请查看以下文章和我提到的git-hub源代码,
http://fadsworld.wordpress.com/2011/03/05/f-wpf-component-development/
您应该对如何声明资源,将其与控件模板一起使用以及将控件模板加载到自定义控件中的想法有所了解。 我也让BLEND以这种方式工作。
让我知道您是否需要任何帮助。
谢谢,法哈德
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.