簡體   English   中英

WPF-觸發器不觸發

[英]WPF - Trigger not firing

嘗試執行應盡可能簡單的操作時遇到問題。 我已經嘗試使用Trigger根據DependencyPropertyDataTrigger -我不能得到任何工作。

觸發器的XAML是:

<Style x:Key="FileWatchButton" BasedOn="{StaticResource {x:Type Button}}" TargetType="{x:Type Button}">
    <Style.Triggers>
        <Trigger Property="Main:Main.XmlFilesAvailableForLoading" Value="True">
            <Setter Property="Background" Value="Red" />
        </Trigger>
    </Style.Triggers>
</Style>

並且相關的代碼背后是:

public static readonly DependencyProperty XmlFilesAvailableForLoadingProperty =
DependencyProperty.Register("XmlFilesAvailableForLoading", typeof(bool), typeof(Main));

public bool XmlFilesAvailableForLoading
{
    get
    {
        try
        {
            return (bool)this.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.DataBind,
                    (System.Windows.Threading.DispatcherOperationCallback)delegate { return GetValue(XmlFilesAvailableForLoadingProperty); },
                    XmlFilesAvailableForLoadingProperty);
        }
        catch (Exception)
        {
            return (bool)XmlFilesAvailableForLoadingProperty.DefaultMetadata.DefaultValue;
        }
    }
    set
    {
        this.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.DataBind,
                (System.Threading.SendOrPostCallback)delegate{ SetValue(XmlFilesAvailableForLoadingProperty, value); }, value);
    }
}

基本上,演示者可以正確設置dp(它基於一個或多個文件的FileSystemWatcher類),但是不會Trigger 這是線程問題嗎?

謝謝。

目前尚不清楚代碼是否完整,但是看起來觸發器中的Property路徑可能是錯誤的。 樣式化的按鈕是否具有Main屬性? 我猜不是; 看起來您正在嘗試觸發另一個名為Main的元素的屬性,對嗎?

無論如何,都不需要名稱空間前綴。 如果按鈕具有名為Main的屬性,則可以直接解決此問題; 如果沒有,那么前綴將無濟於事。

我的猜測是,您可能需要一個DataTrigger,其綁定引用Main元素:

<local:Main Name="MyMain" ... />  <!-- this has the XmlFilesAvailableForLoading property -->

<DataTrigger Binding="{Binding XmlFilesAvailableForLoading, ElementName=MyMain}"
             Value=True>
  <Setter Property="Background" Value="Red" />
</DataTrigger>

無關緊要的是,您在DP getter和setter中應該有任何非樣板實現。 請記住,綁定和樣式系統將繞過getter和setter並直接與基礎存儲進行對話。 因此,我強烈建議將其改回為普通的GetValue和SetValue調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM