簡體   English   中英

找不到轉換器? XamlParseException:找不到名稱/鍵為StringTruncator的資源

[英]Converter not found? XamlParseException: Cannot find a Resource with the Name/Key StringTruncator

我已經在我的App.Resources包含了StringTruncator轉換器。

xmlns:app="clr-namespace:Tabbed_Browser">

<!--Application Resources-->
<Application.Resources>

    <ResourceDictionary>
        <app:StringTruncator x:Key="StringTruncator" />
        <app:StringTruncatorFav x:Key="StringTruncatorFav" />        
        <app:AppInfo x:Key="AppInfo" />
        <app:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" /       
    </ResourceDictionary>

</Application.Resources>

然后在UserControl XML中,我通過此代碼引用它

<Grid x:Name="LayoutRoot" Background="{StaticResource PhoneChromeBrush}">
    <TextBlock TextWrapping="NoWrap" x:Name="txtPageTitle" 
            Text="{Binding BrowserViewModel.PageTitle, Converter={StaticResource StringTruncator}}" 
            FontSize="{StaticResource PhoneFontSizeSmall}"    
            VerticalAlignment="Top"/>

StringTruncator是一個簡單的轉換器,如果字符串超過特定長度,則會附加...

namespace Tabbed_Browser
{
public class StringTruncator : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null)
            return ""; 

        string str = value.ToString();
        int maxChars = 44;
        return str.Length <= maxChars ? str : str.Substring(0, maxChars) + "...";
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

}

但是,然后我運行該項目,我得到了以下內容。 在代碼中刪除StringTruncator轉換器可消除錯誤,但我需要使用該轉換器。 我想念什么?

{System.Windows.Markup.XamlParseException:
 Cannot find a Resource with the Name/Key StringTruncator [Line: 15 Position: 22]
  at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
  at Tabbed_Browser.User_Controls.UCAddressBar.InitializeComponent()
  at Tabbed_Browser.User_Controls.UCAddressBar..ctor()}

您應該改為使用DynamicResource ,這樣它將在運行時應用。 或者,您可以向Usercontrol.Resources本身添加資源。 或者,您也可以這樣做,但是還必須將名稱空間添加到UserControl中:

  Text="{Binding BrowserViewModel.PageTitle, Converter={app:StringTruncator}}"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM