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

时间:2012-12-07 13:46:39

标签: wpf dynamic styles layouttransform

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

使用此代码,工具提示中的任何一个似乎都不会相应缩放。

1 个答案:

答案 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>