Стиль wpf на основе кода

Как мне установить Style basedOn внутри кода (WPF)? Пожалуйста, помогите мне... Мой код не работает... Ошибка ==> Вы не можете изменить после использования 'SetterBaseCollection'. Вот часть моего кода.

public Style SettingStyle(Style sty, double fs)
    {
        Style baseStyle = new Style(sty.TargetType);

        Style newStyle = Application.Current.TryFindResource(sty.TargetType) as Style;
       // Style newStyle = new Style();
       // newStyle.BasedOn = new Style(newStyle.TargetType, baseStyle);
        newStyle.Setters.Add(new Setter(Control.FontSizeProperty, fs));
        if (newStyle.Setters.Count > 1)
        {
            newStyle.Setters.Add(sty.Setters[1]);
            newStyle.Setters.Add(sty.Setters[2]);
            if (newStyle.Setters.Count > 3)
            {
                newStyle.Setters.Add(sty.Setters[3]);
            }
        }

        return newStyle;
    }

1 ответ

Решение

Вы можете установить baseStyle как свойство или конструктор:

newStyle.BasedOn = baseStyle;

или же

Style newStyle = new Style(targetType, baseStyle); 

В твоем случае наверное

    public Style SettingStyle(Style sty, double fs)
    {
        // Return a base type for "TargetType"
        Style baseStyle = Application.Current.TryFindResource(sty.TargetType) as Style;

        Style newStyle = new Style(sty.TargetType, baseStyle); 

        newStyle.Setters.Add(new Setter(Control.FontSizeProperty, fs));

        return newStyle;
    }

или же

    public Style SettingStyle(Style sty, double fs)
    {
        //Use style passed to the function(sty) as a baseStyle for new style 
        Style newStyle = new Style(sty.TargetType, sty); 

        newStyle.Setters.Add(new Setter(Control.FontSizeProperty, fs));

        return newStyle;
    }

Это зависит от того, чего именно вы хотите достичь.

Другие вопросы по тегам