Si je déplace les ressources de l'application vers une ressource UserControl, everythgin exécute groovy. Je ne comprends toujours pas pourquoi.Exception ControlTemplate: "XamlParseException: impossible de trouver une ressource avec le nom/clé"
je remarquai que mon objet d'application MyApp a fait plus que de l'application, il héritera un chargé XAML pour le modèle principal et branché toute la plomberie. J'ai donc décidé de créer un contrôle utilisateur pour supprimer le modèle de l'application (en pensant qu'il pourrait y avoir un problème d'ordre pair ne permettant pas à ma ressource d'être trouvée).
namespace Module1
type Template() as this =
//inherit UriUserControl("/FSSilverlightApp;component/template.xaml", "")
inherit UriUserControl("/FSSilverlightApp;component/templateSimple.xaml", "")
do
Application.LoadComponent(this, base.uri)
let siteTemplate : Grid = (this.Content :?> FrameworkElement) ? siteTemplate
let nav : Frame = siteTemplate ? contentFrame
let pages : UriUserControl array = [|
new Module1.Page1() :> UriUserControl ;
new Module1.Page2() :> UriUserControl ;
new Module1.Page3() :> UriUserControl ;
new Module1.Page4() :> UriUserControl ;
new Module1.Page5() :> UriUserControl ; |]
do
nav.Navigate((pages.[0] :> INamedUriProvider).Uri) |> ignore
type MyApp() as this =
inherit Application()
do Application.LoadComponent(this, new System.Uri("/FSSilverlightApp;component/App.xaml", System.UriKind.Relative))
do
System.Windows.Browser.HtmlPage.Plugin.Focus()
this.RootVisual <- new Template() ;
// test code to check for the existance of the ControlTemplate - it exists
let a = Application.Current.Resources.MergedDictionaries
let b = a.[0]
let c = b.Count
let d : ControlTemplate = downcast c.["TransitioningFrame"]
()
"/FSSilverlightApp;component/templateSimple.xaml"
<UserControl x:Class="Module1.Template"
xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
<Grid HorizontalAlignment="Center" Background="White"
Name="siteTemplate">
<StackPanel Grid.Row="3" Grid.Column="2" Name="mainPanel">
<!--Template="{StaticResource TransitioningFrame}"-->
<navigation:Frame Name="contentFrame" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Template="{StaticResource TransitioningFrame}"/>
</StackPanel>
</Grid>
</UserControl>
"/FSSilverlightApp;component/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>
« /FSSilverlightApp;component/TransitioningFrame.xaml "
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ControlTemplate x:Key="TransitioningFrame" TargetType="navigation:Frame">
<Border Background="Olive"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="5"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
<ContentPresenter Cursor="{TemplateBinding Cursor}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
Content="{TemplateBinding Content}"/>
</Border>
</ControlTemplate>
</ResourceDictionary>
Unfortun Cela n'a pas fonctionné. Si je supprime l'attribut de modèle de l'élément navigationFrame, l'application charge et dirige la zone de contenu vers la première page du tableau de pages. Le référencement de cette ressource continue à renvoyer une erreur de ressource introuvable.
Original Post
Je l'app.xaml suivante (en utilisant Silverlight 3)
<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>
et modèle de contenu:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ControlTemplate x:Key="TransitioningFrame" TargetType="navigation:Frame">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
<ContentPresenter Cursor="{TemplateBinding Cursor}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
Content="{TemplateBinding Content}"/>
</Border>
</ControlTemplate>
</ResourceDictionary>
Le débogueur dit le ContentTemplate est chargé correctement en ajoutant un code minimal:
Type MyApp() comme ceci = Hériter Application() do Application.LoadComponent (ce, nouveau System.Uri ("/ FSSilverlightApp; composant/App.xaml", System.UriKind.Relative))
let cc = new ContentControl()
let mainGrid : Grid = loadXaml("MainWindow.xaml")
do
this.Startup.Add(this.startup)
let t = Application.Current.Resources.MergedDictionaries
let t1 = t.[0]
let t2 = t1.Count
let t3: ControlTemplate = t1.["TransitioningFrame"]
Avec cette ligne dans mon main.xaml
<navigation:Frame Name="contentFrame" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Template="{StaticResource TransitioningFrame}"/>
Rendements cette exception
détails de l'erreur de page Web
Agent d'utilisateur: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4,0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E) Horodatage: Lun, 24 May 2010 23:10:15 UTC
Message: erreur non gérée dans Silverlight Application Code: 4004
Catégorie: ManagedRuntimeError
Message: System.Windows.Markup .XamlParseException: Vous ne trouvez pas une ressource avec le Nom/clé TransitioningFrame [Ligne: 86 Position: 115] à MS.Internal.XcpImports.CreateFromXaml (String xamlString, Boolean createNamescope, Boolean requireDefaultNamespace, allowEventHandlers booléennes, Boolean expandTemplatesDuringParse) à MS.Internal.XcpImports.CreateFromXaml (String xamlString, Boolean createNamescope, booléenne requireDefaultNamespace, allowEventHandlers booléennes) à System.Windows.Markup.XamlReader.Load (String xaml) à Globals.loadXaml [T] (Chaîne xam Lpath) à Module1.MyApp..ctor()Ligne: 54 Char: 13 Code: 0 URI: file: /// C: /fsharp/FSSilverlightDemo/FSSilverlightApp/bin/Debug/SilverlightApplication2TestPage.html