0

我有一个可以缩放它的 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()一切正常。我不明白为什么样式不起作用,而它应该对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); }
    }

在 MainWindow 的某处,响应用户输入:

this.SetValue(TransformToApplyProperty, new ScaleTransform(val, val));

XAML 样式:

<Style TargetType="{x:Type ToolTip}">
    <Setter Property="LayoutTransform" Value="{Binding TransformToApply, Source={x:Reference WndXName}}"/>
...

使用此代码,似乎没有一个工具提示可以相应地缩放。

4

1 回答 1

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>
于 2012-12-07T22:28:57.007 回答