Стиль подсказки WPF с динамическим LayoutTransform

У меня есть приложение, которое масштабирует его интерфейс, и я хочу масштабировать подсказки с ним. Я пытался сделать это:

<Style TargetType="{x:Type ToolTip}">
    <Setter Property="LayoutTransform" Value="{DynamicResource scaleTransf}"/>
    ...
</Style>

...где scaleTransf ресурс, который я изменяю с помощью кода:

Application.Current.Resources["scaleTransf"] = new ScaleTransform(...);

с:

<ScaleTransform x:Key="scaleTransf" ScaleX="1" ScaleY="1"/>

Большинство подсказок масштабируются по размеру, но некоторые из них, созданные кодом C#, не масштабируются. Я проверил, и кажется, что я не устанавливаю их стиль или LayoutTransform с помощью кода, поэтому я не совсем понимаю, что происходит не так... Более того, у меня сложилось впечатление, что вышеупомянутый код XAML работал хорошо в течение нескольких дней тому назад.:(

Есть ли что-то, что я могу сделать, чтобы он работал все время, не устанавливая LayoutTransform в коде позади?

РЕДАКТИРОВАТЬ: всплывающие подсказки, которые не меняют масштаб, это те, которые стали видны раньше.

EDIT1: если я установлю LayoutTransform каждого ToolTip экземпляр для scaleTransf в коде за использованием SetResourceReference() все отлично работает Я не понимаю, почему стиль не работает, хотя он должен делать то же самое для каждого ToolTip это создается... Основываясь на моих ограниченных знаниях WPF, я бы назвал это БАГОМ!


EDIT2:

Я также попробовал это:

Application.Current.Resources.Remove("scaleTransf");
Application.Current.Resources.Add("scaleTransf", new ScaleTransform(val, val));

EDIT3: моя попытка решить эту проблему с помощью DependencyProperty:

В MainWindow.xaml.cs:

    public static readonly DependencyProperty TransformToApplyProperty = DependencyProperty.Register("TransformToApply", typeof(Transform), typeof(MainWindow));
    public Transform TransformToApply
    {
        get { return (Transform)this.GetValue(TransformToApplyProperty); }
    }

Где-то в MainWindow, в ответ на пользовательский ввод:

this.SetValue(TransformToApplyProperty, new ScaleTransform(val, val));

Стиль XAML:

<Style TargetType="{x:Type ToolTip}">
    <Setter Property="LayoutTransform" Value="{Binding TransformToApply, Source={x:Reference WndXName}}"/>
...

Используя этот код, ни один из всплывающих подсказок, кажется, не масштабируется соответственно.

1 ответ

Решение

Я не думаю, что ресурс - лучший подход в вашей ситуации.

В этом случае было бы лучше объявить ваше Transform как свойство DependencyProperty вашего окна:

public static readonly DependencyProperty TransformToApplyProperty = DependencyProperty.Register("TransformToApply", typeof(Transform), typeof(Window));

тогда в XAML:

<Window  .... (all the xmlns)
         x:Name="window"/>
    <AnyControl ScaleTransform="{Binding TransformToApply, ElementName=window}"/>
</Window>
Другие вопросы по тегам