2016-12-16 72 views
0

如何將DataTrigger設置爲TextBox「Text」屬性? 我不想將DataTrigger設置爲TextBox「Text」屬性綁定到的屬性。如何將DataTrigger設置爲文本框「文本」屬性?

我有一個文本框的樣式。這DataTrigger不起作用,我不知道爲什麼。

<Style x:Key="DatagridTextboxStyle" TargetType="TextBox"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Text, RelativeSource={RelativeSource Self}}" Value="0"> 
       <Setter Property="Text" Value="X"></Setter> 
      </DataTrigger> 
     </Style.Triggers> 
</Style> 

這是我的文本框是一個Tempate的DatagridCell的

<DataGridTemplateColumn Header="6"> 
         <DataGridTemplateColumn.CellTemplate> 
          <DataTemplate> 
           <TextBox Style="{StaticResource DatagridTextboxStyle}" IsReadOnly="true" Width="{Binding ElementName=AccRecOverdueTbl, Path=ActualWidth}" Text="{Binding AccountsReceivable.OverdueAtTheEndOfTheReportingPeriod, Mode=TwoWay}"></TextBox> 
          </DataTemplate> 
         </DataGridTemplateColumn.CellTemplate> 
        </DataGridTemplateColumn> 
+0

因爲您使用文本作爲目標和條件 –

回答

0

這並不原因有二。第一個也是最明顯的一點是,在setter中設置與DataTrigger綁定的相同屬性將導致引發StackOverflowException。 Text屬性被設置,觸發器觸發,文本被重新設置,觸發器再次觸發等等。

第二件事情是本地值優先於樣式設置器設置的值。因此,如果將TextBox的Text屬性設置在DataGridColumn的CellTemplate中,則Stylesetter將永遠無法「覆蓋」該值。

你也可以使用當OverdueAtTheEndOfTheReportingPeriod源屬性返回0。或者你可以另一個來源屬性添加到返回一個字符串類和綁定到這個一個直接返回「X」轉換器:

public string FormattedOverdueAtTheEndOfTheReportingPeriod 
{ 
    get { return OverdueAtTheEndOfTheReportingPeriod == 0 ? "X" : OverdueAtTheEndOfTheReportingPeriod.ToString(); } 
} 

使用DataTrigger不是一個選項。

相關問題