2011-06-14 42 views
5

我想在屏幕上顯示一個數字。如果這個數字是0,我不希望它顯示。TextBlock觸發器代替使用轉換器

<TextBlock Text="{Binding Path=Class.Count}" FontSize="20" FontWeight="Bold"> 
    <TextBlock.Triggers> 
     <DataTrigger Binding="{Binding Path=Class.Count}" Value="0"> 
      <Setter Property="TextBlock.Text" Value=""/> 
     </DataTrigger> 
    </TextBlock.Triggers> 
</TextBlock> 

我嘗試了上面的一段代碼後,經常觸發未能解決我的問題。我不想寫一個轉換器來處理一個特定的數字。有沒有辦法創建一個觸發器,如果​​它是0就會隱藏這個數字?

編輯:當我嘗試使用常規觸發器或數據觸發器時,我得到一個xaml解析錯誤,告訴我我需要使用事件觸發器。

我試圖在二傳手的值設置爲一個數字,以確保有一個空值不會導致你與設置Text屬性的綁定戰問題

回答

8

我會讓控件摺疊/隱藏,而不是將文本設置爲String.Empty。

較少混淆。

編輯

<TextBox> 
    <TextBox.Style> 
     <Style> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Name.Length}" Value="0"> 
        <Setter Property="UIElement.Visibility" Value="Collapsed"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBox.Style> 
</TextBox> 

OR

<TextBox> 
    <TextBox.Style> 
     <Style TargetType="TextBox"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Name.Length}" Value="0"> 
        <Setter Property="Visibility" Value="Collapsed"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBox.Style> 
</TextBox> 
  1. 只有一個樣式允許DataTriggers。
  2. xaml解析器希望檢查屬性的存在,因此它需要ownertype。可見性在UIElement類中聲明。有兩種方法可以指定,就像我在兩個示例中所顯示的那樣。
+0

已經想到了,但TextBlock上沒有可見性屬性。我可以將TextBlock封裝在另一個控制器中,但我試圖避免任何複雜的東西,我認爲這麼簡單。 – 2011-06-14 14:32:46

+0

我添加了一個工作示例 – 2011-06-14 14:40:08

+0

我寫了完全相同的東西,但有'FrameworkElement.Visibility'而不是'Control.Visibility',但我沒有使用樣式。一旦我將樣式添加到文本塊中,代碼就完美了。你能解釋一下爲什麼我今後不會遇到這個問題嗎? – 2011-06-14 14:47:23