2012-12-07 57 views
0

我有一個擴展它的UI的應用程序,我想用它縮放工具提示。 我也試着這樣做:帶動態佈局轉換的WPF工具提示樣式

<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:。如果我在代碼中設置每個ToolTip實例的LayoutTransformscaleTransf背後使用SetResourceReference()一切工作正常,我不明白爲什麼當它應該做的正是樣式不起作用每相同10被創建...基於我對WPF有限的知識,我會稱這是一個BUG!


EDIT2:

我也試過這樣:

Application.Current.Resources.Remove("scaleTransf"); 
Application.Current.Resources.Add("scaleTransf", new ScaleTransform(val, val)); 

EDIT3:我嘗試這種使用的DependencyProperty來解決:

在主窗口.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}}"/> 
... 

使用該代碼,而不是工具提示中的單個似乎相應地擴大。

+0

嘗試'Application.Current.Resources.Add(XXX )'而不是。 –

+0

我剛剛嘗試刪除並重新添加資源,這是同樣的事情。 – NoOne

+0

通過刪除和重新添加,同儕意味着什麼?這是動態的嗎?發佈XAML和代碼。 –

回答

2

我不認爲資源是您情況中的最佳方法。

這將是在這種情況下,更好地來聲明轉化爲你的窗口的一個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> 
+0

我剛剛嘗試過這一點,但區別在於我已將樣式設置爲「變形」。爲每個控件設置它並不是一件容易的事情(我認爲我的第一個解決方案也可以這樣工作)。假設我沒有做錯什麼,它不起作用。見上面的EDIT3。 – NoOne

+0

嘗試使用'{Binding TransformToApply,Source = {x:Reference window}}' –

+0

這給了我一個例外:'未解析的引用'MainWindow'。'我嘗試添加MainWindow的命名空間,它仍然沒有找到它! – NoOne