2016-04-22 156 views
1

我有一個自定義的工具提示,我試圖去設計風格。我有以下幾種:可見性取決於綁定值

<UserControl.ToolTip> 
    <StackPanel> 
     <TextBlock Text="{Binding Path=ToolPrototype.TypeName}" MaxWidth="200" FontWeight="Bold" TextWrapping="Wrap"></TextBlock> 
     <TextBlock Text="{Binding Path=ToolPrototype.Description}" MaxWidth="200" TextWrapping="Wrap"></TextBlock> 
     <TextBlock Text="{Binding Path=ToolPrototype.Note}" MaxWidth="200" FontWeight="Regular" FontStyle="Italic" TextWrapping="Wrap"></TextBlock> 
    </StackPanel> 
</UserControl.ToolTip> 

這很直截了當。標題將會大膽。描述將是常規的字體重量,'note'將以斜體顯​​示。問題是,並非我所有的ToolPrototypes都將.Note作爲成員(基本上爲null)。我的一些工具包含一個分配給Note屬性的字符串值,但不是全部。因此,在筆記爲空的情況下,我仍然在我的工具提示中看到一個空白區域(實際上它就像一個空白行)。如果ToolPrototype實際上已經定義了音符屬性,我想要做的只是包含該行。否則,省略它。所以,我認爲我所追求的是試圖有條件地檢查綁定是否存在......但也許這不是正確的思考方式。任何人可以提供一些指導?

更新

工作過灰的建議下,我試圖用DataTriggers工作。這是我現在擁有的。

<UserControl.ToolTip> 
    <StackPanel> 
     <TextBlock Text="{Binding Path=ToolPrototype.TypeName}" MaxWidth="200" FontWeight="Bold" TextWrapping="Wrap"></TextBlock> 
     <TextBlock Text="{Binding Path=ToolPrototype.Description}" MaxWidth="200" TextWrapping="Wrap"></TextBlock> 
     <TextBlock MaxWidth="200" Text="{Binding Path=ToolPrototype.Note}" FontWeight="Regular" FontStyle="Italic" TextWrapping="Wrap"> 
      <TextBlock.Style> 
       <Style> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding Path=ToolPrototype.Note}" Value="{x:Null}"> 
          <Setter Property="Visibility" Value="Collapsed"></Setter> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </TextBlock.Style> 
     </TextBlock> 
    </StackPanel> 
</UserControl.ToolTip> 

但是,這並沒有建立,並說成員「可見性」不承認。任何人都可以指出我的錯誤嗎?

+2

@ASh是對的。如果出現這種情況,您還可以編寫一個'NullToVisibilityConverter'來節省XAML中的混亂:'' –

+0

I按照ASh的建議,按照觸發方式。習慣了這一點,無需爲轉換器實現所有功能(請注意,有時轉換器仍然是最佳解決方案,具體取決於您的方案的複雜性) – Dbl

+0

感謝您的支持!但是,我在提供的鏈接中丟失了什麼?我似乎沒有看到他們的數據觸發器的任何答案。 – andyopayne

回答

1

您的StyleTextBlock類型沒有關聯。

因此,WPF不知道Visibility屬性。 (因爲該屬性由TextBlock定義)

您可以通過將其更改爲TextBlock.Visibility來明確告訴WPF哪個類定義了該屬性。讓我舉個例子:

<UserControl.ToolTip> 
    <StackPanel> 
     <TextBlock Text="{Binding Path=ToolPrototype.TypeName}" MaxWidth="200" FontWeight="Bold" TextWrapping="Wrap"></TextBlock> 
     <TextBlock Text="{Binding Path=ToolPrototype.Description}" MaxWidth="200" TextWrapping="Wrap"></TextBlock> 
     <TextBlock MaxWidth="200" Text="{Binding Path=ToolPrototype.Note}" FontWeight="Regular" FontStyle="Italic" TextWrapping="Wrap"> 
      <TextBlock.Style> 
       <Style> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding Path=ToolPrototype.Note}" Value="{x:Null}"> 
          <Setter Property="TextBlock.Visibility" Value="Collapsed"></Setter> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </TextBlock.Style> 
     </TextBlock> 
    </StackPanel> 
</UserControl.ToolTip> 
+0

謝謝。愚蠢的錯誤。 – andyopayne