2008-11-24 153 views
1

我目前正在使用WPF UI編寫程序,並且我有一個關閉或取消的按鈕,具體取決於頁面是否有任何更改。爲了實現這一點,我想在按鈕上使用一個觸發器(包裝在一個樣式中),這樣當依賴屬性HasChanges爲true時,按鈕將從「關閉」更改爲「取消」。到目前爲止,我的程序顯示「Close」作爲按鈕的文本,但是當我的依賴屬性HasChanges變爲true時沒有任何反應。 WPF頁面正在使用VB.Net編寫,而不是XAML。WPF:向按鈕添加觸發器

到目前爲止,我有:

Private Sub SetUpMyButton() 
    Me.MyButton.Style = Me.GetMyButtonStyle() 
End Sub 

Private Function GetMyButtonStyle() As Style 
    Dim hasChangesTrigger as New Trigger 
    hasChangesTrigger.Property = CustomControl.HasChangesProperty 
    hasChangesTrigger.Value = True 
    hasChangesTrigger.Setters.Add(New Setter(Button.ContentProperty, "Cancel")) 

    Dim hasChangesStyle as New Style 
    hasChangesStyle.TargetType = GetType(Button) 
    hasChangesStyle.Setters.Add(New Setter(Button.ContentProperty, "Close")) 
    hasChangesStyle.Triggers.Add(hasChangesTrigger) 
    hasChangesStyle.Seal() 

    Return hasChangesStyle 
End Function 

任何幫助是極大的讚賞。

回答

1

我不知道爲什麼你會在代碼中執行此操作,而不是XAML,但我認爲這只是您的觸發器不知道在哪裏查找自定義依賴項屬性。用你的代碼,它會在按鈕本身上查找HasChanges屬性。這是打算嗎?也許你需要設置TriggerSourceName屬性。或者也許總共使用不同的觸發器類型(例如,一個DataTrigger)會更容易。

+2

我不確定他爲什麼選擇在代碼中執行此操作,但您可能並不知道許多僱主堅持使用XAML代碼,特別是在創建commericl控件類庫時。 這是因爲控件的大部分價值在於它的控件模板和樣式,如果留在XAML中,可以很容易地被使用BAML viewer等工具的人盜取。 沒有任何可以混淆XAML的混淆工具/ BAML,因此將其放在代碼中的原因。但是,OP可能有不同的理由。 – 2009-08-08 18:21:31