2016-10-25 22 views
1

我想通過數據觸發器更新綁定的字符串格式。因此,我認爲只是這樣做:未應用WPF綁定 - 爲什麼會發生

<TextBlock Text="{Binding Foo.Name}" Margin="3"> 
        <TextBlock.Style> 
        <Style TargetType="TextBlock"> 
         <Setter Property="Text" Value="{Binding Path=., StringFormat='Start {0}'}" /> 
         <Style.Triggers> 
         <DataTrigger Binding="{Binding Foo.IsEnabled}" Value="True"> 
         <Setter Property="Text" Value="{Binding Path=., StringFormat='Stop {0}'}" /> 
         </DataTrigger> 
         </Style.Triggers> 
        </Style> 
        </TextBlock.Style> 
       </TextBlock> 

現在這正說明Foo.Name的價值,而不是與應用的字符串格式(「開始」 /「停止」的字符串)。

我修改了代碼,使其工作。這是工作代碼:

 <TextBlock Margin="3"> 
      <TextBlock.Style> 
      <Style TargetType="TextBlock"> 
       <Setter Property="Text" Value="{Binding Foo.Name, StringFormat='Start {0}'}" /> 
       <Style.Triggers> 
       <DataTrigger Binding="{Binding Foo.IsEnabled}" Value="True"> 
        <Setter Property="Text" Value="{Binding Foo.Name, StringFormat='Stop {0}'}" /> 
       </DataTrigger> 
       </Style.Triggers> 
      </Style> 
      </TextBlock.Style> 
     </TextBlock> 

現在我正在尋找爲什麼第一段代碼不起作用的原因,以及爲什麼代碼的第二件作品。 我在DataTemplates中看到類似的行爲,我無法通過DataTrigger中的Setter設置或更改屬性值,因爲該屬性已直接通過對象本身的屬性設置。只有當我從對象本身中刪除屬性並將其設置爲它的工作風格時。

或者這只是WPF中的限制嗎?

+3

它是[依賴屬性值優先順序](https://msdn.microsoft.com/en-us/library/ms743230(v = vs.100).aspx)。本地值('Text =「{Binding Foo.Name}」')比樣式設置值 – ASh

+0

更重要,所以第一個示例中的datatrigger「stop」也不適用,因爲此優先級? – juFo

+1

樣式設置器是#8,樣式觸發器是#6,本地值擊敗它們是#3 – ASh

回答