2017-11-20 13 views
0

ためのDataTemplateが型を見つけることができません別のカスタムレンダラーを参照するC#で新しいDataTemplateを作成しようとするとエラーが発生し、その解決策が見つかりません。私はDataTemplateをしてImageTinted他の場所で働くから私はXamarin.Formsで働いていると私は(UWP)TabbedPageのカスタムレンダラを作成しようとしていた、それは一種の作品...しかし、ときに私の未知の名前空間、Xamarin.Forms UWP

<tint:ImageTinted /> 

を呼び出さないとき

Windows.UI.Xaml.DataTemplate GetStyledHeaderTemplate() { 
    StringBuilder tpl = new StringBuilder(); 
    tpl.Append("<DataTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\""); 
    tpl.Append(" xmlns:tint=\"clr-namespace:MyNamespace.UI;assembly=MyNamespace\""); 
    tpl.Append(" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">"); 
    tpl.Append("<StackPanel Margin=\"0\" Padding=\"5, 0\" VerticalAlignment=\"Top\">"); 
    tpl.Append("<tint:ImageTinted TintColor=\"White\" Source=\"{Binding UWPIcon}\" Width=\"24\" Height=\"24\" Margin=\"0, 5, 0, 0\" />"); 
    tpl.Append("<TextBlock Padding=\"0\" Margin=\"0, 0, 0, 4\""); 
    tpl.Append(" Text=\"{Binding Title}\" FontFamily=\"Segoe UI\" Foreground=\"White\" HorizontalAlignment=\"Center\" FontSize=\"13\" />"); 
    tpl.Append("</StackPanel>"); 
    tpl.Append("</DataTemplate>"); 
    return (Windows.UI.Xaml.DataTemplate)XamlReader.Load(tpl.ToString()); 
} 

コードが正常に動作します。

、助けてください!

エラー:

Windows.UI.Xaml.Markup.XamlParseException occurred 
    HResult=0x802B000A 
    Message=The text associated with this error code could not be found. 

The type 'ImageTinted' was not found because 'clr-namespace:MyNamespace.UI;assembly=MyNamespace' is an unknown namespace. [Line: 1 Position: 339] 
    Source= 
    StackTrace: 
    at Windows.UI.Xaml.Markup.XamlReader.Load(String xaml) 
    at MyNamespace.UWP.StyledTabbedPageRenderer.GetStyledHeaderTemplate() in D:\...\MyNamespace.UWP\UI\Renderers\StyledTabbedPageRenderer.cs:line 91 
    at MyNamespace.UWP.StyledTabbedPageRenderer.OnElementChanged(VisualElementChangedEventArgs e) in D:\...\MyNamespace.UWP\UI\Renderers\StyledTabbedPageRenderer.cs:line 35 
    at Xamarin.Forms.Platform.UWP.TabbedPageRenderer.SetElement(VisualElement element) 
    at Xamarin.Forms.Platform.UWP.Platform.CreateRenderer(VisualElement element) 
    at Xamarin.Forms.Platform.UWP.VisualElementExtensions.GetOrCreateRenderer(VisualElement self) 
    at Xamarin.Forms.Platform.UWP.Platform.<SetCurrent>d__51.MoveNext() 

答えて

0
tpl.Append(" xmlns:tint=\"clr-namespace:MyNamespace.UI;assembly=MyNamespace\""); 

変更MyNamespace.UIあなたの名前空間の名前に アセンブリは、この場合は(あなたのPCLプロジェクト

+0

私は、名前空間のすべての組み合わせを試してみましたが、同じエラーを取得しました:/ – user8971976

0
の名前あなたのアセンブリの名前でなければなりませんあなたのレンダラを含むUWPプロジェクトで

、MyNamespace.UIはクラスImageTintedの名前空間で、アセンブリが参照されていると仮定すると、この

を置き換えます以下で
tpl.Append(" xmlns:tint=\"clr-namespace:MyNamespace.UI;assembly=MyNamespace\""); 

tpl.Append(" xmlns:tint=\"using:MyNamespace.UI\""); 

例えばUWPプロジェクトでImageTintedはこのように見れば、:

<UserControl 
x:Class="MyNamespace.UI.ImageTinted" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d"> 

<TextBlock Text="ImageTinted"/> 

これはXamlReader.Load文でテンプレートをロードする必要があります。 returnステートメントの後GetStyledHeaderTemplate()、即ち端ブレースにブレークポイントを設定することにより

デバッグ。現時点では、XamlReader.Loadの例外は認められません。それでもエラーが発生した場合

あなたはImageTintedクラスになっているはずです。ここで

はTabbedPageたとえばUWPレンダラーです:

[assembly: ExportRenderer(typeof(TabbedPage), typeof(MyTabbedPageRenderer))] 
namespace MyRenderer.UWP 
{ 
    public class MyTabbedPageRenderer : TabbedPageRenderer 
    { 
    protected override void OnElementChanged(VisualElementChangedEventArgs e) 
    { 
     base.OnElementChanged(e); 

     if (Control != null) 
     { 
      Control.HeaderTemplate = GetStyledHeaderTemplate(); 
     } 
    } 
    } 

    private Windows.UI.Xaml.DataTemplate GetStyledHeaderTemplate() 
    { 
    string xaml = @" 
<DataTemplate 
    xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" 
    xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" 
    xmlns:tint=""using:MyNamespace.UI""> 
<StackPanel Orientation=""Horizontal""> 
    <tint:ImageTinted Source=""{Binding Icon}""/> 
    <TextBlock Text=""{Binding Title}"" FontFamily=""Segoe UI"" 
FontSize=""13"" /> 
</StackPanel> 
</DataTemplate>"; 

    return (Windows.UI.Xaml.DataTemplate)XamlReader.Load(xaml); 
    } 
} 
+0

はあなたのソリューションをテストされたが、同じ結果を得ました。 tmpXamlをMainPageに貼り付けると、エラーが発生しました。 - 指定した値をコレクションに割り当てることはできません。次の型が期待されました:「のUIElement」 と - タイプの値は「ImageTinted」タイプのコレクションや辞書に追加することはできません「UIElementCollection」 – user8971976

+0

同じエラーをreturn文 – user8971976

+0

に私も、他のカスタムコントロールでImageTintedを置き換えますそれはうまくいきませんでした。 ImageTintedはC#のカスタムレンダリングコントロールで、それ以外の場合は正常に動作します。 UWP用のカスタムTabbedPageRendererから呼び出すときに失敗します。 – user8971976

関連する問題