ProvideValue MarkupExtension никогда не вызывается во время выполнения при выводе из DynamicResourceExtension? - PullRequest
0 голосов
/ 11 марта 2020

Как подробно описано в этих сообщениях: {0} недопустимо для Setter.Value. Единственными поддерживаемыми типами MarkupExtension являются DynamicResourceExtension и BindingBase или производные типы и . Недопустимое значение MarkupExtension для Setter.Value. Единственными поддерживаемыми типами MarkupExtension являются DynamicResourceExtension и BindingBase или производные типы , расширения разметки, вызываемые в Setter.Value, кажутся нарушающими конструктор, но работают должным образом во время выполнения.

В моем случае единственный найденный способ исправить дизайнер делал мое расширение разметки производным от DynamicResourceExtension, но после этого мое расширение разметки ProvideValue никогда не вызывается, есть ли причина, почему? Кроме того, как я могу работать как во время выполнения, так и в дизайнере?

ExampleMarkupExtension.cs

public class ExampleMarkupExtension : DynamicResourceExtension
{
    public ExampleMarkupExtension()
    {
        //this is used to avoid exception thrown by DynamicResourceExtension.ProvideValue(IServiceProvider) at line 3 (within the function)
        this.ResourceKey = "AvoidException"; // Comment this line when inheriting from MarkupExtension directly
    }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return 600;
    }
}

MainWindow.xaml

<StackPanel>
    <StackPanel.Style>
        <Style TargetType="StackPanel">
            <Setter Property="Height" Value="{local:ExampleMarkupExtension}"/>
        </Style>
    </StackPanel.Style>
    <Button Content="Button"/>
    <Button Content="Button"/>
    <Button Content="Button"/>
    <Button Content="Button"/>
</StackPanel>
...