我有一个应用程序可以扩展它的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
,则一切正常。我不明白为什么Style不起作用,而它应该对创建的每个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); }
}
在主窗口的某个位置,响应用户输入:
this.SetValue(TransformToApplyProperty, new ScaleTransform(val, val));
XAML样式:
<Style TargetType="{x:Type ToolTip}">
<Setter Property="LayoutTransform" Value="{Binding TransformToApply, Source={x:Reference WndXName}}"/>
...
使用此代码,似乎没有一个工具提示能够相应地进行缩放。
我认为在您的情况下,资源不是最好的方法。
在这种情况下,最好将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>