【发布时间】:2012-12-07 13:46:38
【问题描述】:
我有一个可以缩放 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:如果我在代码后面使用SetResourceReference() 将每个ToolTip 实例的LayoutTransform 设置为scaleTransf,一切正常。我不明白为什么样式不起作用,而它应该对创建的每个 ToolTip 执行完全相同的操作...基于我对 WPF 的有限了解,我将其称为 BUG!
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}}"/>
...
使用此代码,似乎没有一个工具提示可以相应地缩放。
【问题讨论】:
-
改用
Application.Current.Resources.Add(xxx)。 -
我刚刚尝试删除并重新添加资源,结果是一样的。
-
删除和重新添加是什么意思?这是动态的吗?发布 XAML 和代码。
-
我的意思见 EDIT2。
-
你不需要那个。所有 WPF 类都映射到默认的 xml 命名空间。
标签: wpf dynamic styles layouttransform