diff options
Diffstat (limited to 'Xamarin.Forms.Xaml')
-rw-r--r-- | Xamarin.Forms.Xaml/IXamlFileProvider.cs | 9 | ||||
-rw-r--r-- | Xamarin.Forms.Xaml/Xamarin.Forms.Xaml.csproj | 1 | ||||
-rw-r--r-- | Xamarin.Forms.Xaml/XamlLoader.cs | 15 |
3 files changed, 23 insertions, 2 deletions
diff --git a/Xamarin.Forms.Xaml/IXamlFileProvider.cs b/Xamarin.Forms.Xaml/IXamlFileProvider.cs new file mode 100644 index 00000000..7f989019 --- /dev/null +++ b/Xamarin.Forms.Xaml/IXamlFileProvider.cs @@ -0,0 +1,9 @@ +using System; + +namespace Xamarin.Forms.Xaml +{ + public interface IXamlFileProvider + { + string GetXamlFor(Type type); + } +}
\ No newline at end of file diff --git a/Xamarin.Forms.Xaml/Xamarin.Forms.Xaml.csproj b/Xamarin.Forms.Xaml/Xamarin.Forms.Xaml.csproj index cb4577c9..0081f67c 100644 --- a/Xamarin.Forms.Xaml/Xamarin.Forms.Xaml.csproj +++ b/Xamarin.Forms.Xaml/Xamarin.Forms.Xaml.csproj @@ -81,6 +81,7 @@ <Compile Include="ExpandMarkupsVisitor.cs" /> <Compile Include="XamlCompilationAttribute.cs" /> <Compile Include="TypeArgumentsParser.cs" /> + <Compile Include="IXamlFileProvider.cs" /> </ItemGroup> <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" /> <ItemGroup> diff --git a/Xamarin.Forms.Xaml/XamlLoader.cs b/Xamarin.Forms.Xaml/XamlLoader.cs index 37bea4e4..e0dd894f 100644 --- a/Xamarin.Forms.Xaml/XamlLoader.cs +++ b/Xamarin.Forms.Xaml/XamlLoader.cs @@ -38,6 +38,8 @@ namespace Xamarin.Forms.Xaml internal static class XamlLoader { static readonly Dictionary<Type, string> XamlResources = new Dictionary<Type, string>(); + internal static bool DoNotThrowOnExceptions { get; set; } + internal static IXamlFileProvider XamlFileProvider { get; set; } public static void Load(object view, Type callingType) { @@ -64,12 +66,16 @@ namespace Xamarin.Forms.Xaml var rootnode = new RuntimeRootNode (new XmlType (reader.NamespaceURI, reader.Name, null), view, (IXmlNamespaceResolver)reader); XamlParser.ParseXaml (rootnode, reader); - Visit (rootnode, new HydratationContext { RootElement = view }); + Visit (rootnode, new HydratationContext { + RootElement = view, + DoNotThrowOnExceptions = XamlLoader.DoNotThrowOnExceptions + }); break; } } } + [Obsolete ("Use the XamlFileProvider to provide xaml files")] public static object Create (string xaml, bool doNotThrow = false) { object inflatedView = null; @@ -113,6 +119,12 @@ namespace Xamarin.Forms.Xaml static string GetXamlForType(Type type) { + string xaml = null; + + //the Previewer might want to provide it's own xaml for this... let them do that + if (XamlFileProvider != null && (xaml = XamlFileProvider.GetXamlFor(type)) != null) + return xaml; + var assembly = type.GetTypeInfo().Assembly; string resourceId; @@ -129,7 +141,6 @@ namespace Xamarin.Forms.Xaml // first pass, pray to find it because the user named it correctly - string xaml = null; foreach (var resource in resourceNames) { if (ResourceMatchesFilename(assembly, resource, likelyResourceName)) |