Стиль подсказки 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>