簡體   English   中英

在XAML中使用標記擴展作為屬性Setter的值。 {0}對Setter.Value無效。 唯一受支持的MarkupExtension類型是

[英]Using a Markup Extension as value of property Setter in XAML. {0} is not valid for Setter.Value. The only supported MarkupExtension types are

下面是一個非常小的示例,說明如何獲取此exception 這已經是一個已知問題(超過7年!)。 已經有解決方案了嗎?


例外

FooExtension對於Setter.Value無效。 唯一受支持的MarkupExtension類型是
DynamicResourceExtension和BindingBase或派生類型。

C#類

public class FooExtension : MarkupExtension
{
    public string Key { get; set; }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return new SolidColorBrush((Color)ColorConverter.ConvertFromString(Key));
    }
}

這不是我正在使用的原始類/ MarkupExtension,但是邏輯(返回SolidColorBrush )是相同的,並且給出了完全相同的錯誤/行為。

  • 設計時例外
  • 重建解決方案后設計器中的異常消失了
  • 運行時沒有問題

XAML用法

Background="{extensions:Foo Key=#FFF37C21}"

extension一直工作到昨天超過1年! 包括每個Windows,VisualStudio或任何其他更新! 現在從1天開始,我在設計期間就收到了這個錯誤行為!

我正在使用:

  • VS15.7.3
  • .NET Framework 4.7.02556

資料來源:


綁定解決方法(不起作用)

在某些頁面上,據說您應該使用binding 但是我得到了相同的錯誤/行為!

順便說一句 我在Storyboard使用了此標記擴展,因此無論如何我都無法返回binding

    public override object ProvideValue(IServiceProvider serviceProvider)
    {            
        Binding binding = new Binding();
        binding.Source = new SolidColorBrush((Color)ColorConverter.ConvertFromString(Key));

        return binding.ProvideValue(serviceProvider);
    }

我解決了問題! 我是一種XAML Resources關系。 我定義的ResourceDictionaryApp.xaml這是已經在規定AssemblyInfo.csXmlnsPrefix / XmlnsDefinition

暫無
暫無

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

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