具有动态LayoutTransform的WPF工具提示样式



我有一个应用程序可以扩展它的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>

相关内容

  • 没有找到相关文章

最新更新