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 :LayoutTransformToolTipインスタンスをscaleTransfコード ビハインドに設定すると、SetResourceReference()すべて正常に動作します。作成されるすべてのものに対してまったく同じことを行うはずなのに、スタイルが機能しない理由がわかりませんToolTip... WPFに関する私の限られた知識に基づいて、これをバグと呼びます!


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 つもスケーリングされないように見えます。

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 に答える