我有一个应用程序可以扩展它的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()
,一切正常。我不明白为什么Style不起作用,而它应该对每个创建的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}}"/>
...
使用此代码,工具提示中的任何一个似乎都不会相应缩放。
答案 0 :(得分:2)
我认为资源不是您处理的最佳方法。
在这种情况下,将您的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>