我有一个可以缩放它的 UI 的应用程序,我想用它来缩放工具提示。我试过这样做:
<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# 代码创建的提示不会按比例缩放。我检查过,似乎我没有通过代码设置他们的 Style 或 LayoutTransform,所以我真的不明白出了什么问题......此外,我的印象是上面的 XAML 代码运行了几天前。:(
我可以做些什么来让它一直工作而不在代码隐藏中设置 LayoutTransform 吗?
编辑:不改变比例的工具提示是以前可见的。
EDIT1:如果我将LayoutTransform
每个ToolTip
实例的设置为scaleTransf
在代码后面使用SetResourceReference()
一切正常。我不明白为什么样式不起作用,而它应该对ToolTip
创建的每一个都做完全相同的事情......基于我对 WPF 的有限知识,我将其称为 BUG!
编辑2:
我也试过这个:
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}}"/>
...
使用此代码,似乎没有一个工具提示可以相应地缩放。