2013-03-28 30 views
5

我有一個堆疊面板,我想根據標籤的內容使其可見。只是不知道爲什麼它不適合我。粗體突出顯示的是我想要隱藏的內容。任何建議?基於標籤內容不能正常工作的堆疊面板可見性

<StackPanel Orientation="Horizontal"> 
<Label Nane="lblCarrier" Content="{Binding Path=Carrier}" /> 
**<StackPanel Orientation="Horizontal"> 
    <StackPanel.Style> 
     <Style TargetType="StackPanel"> 
      <Setter Property="Visibility" Value="Visible" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Content, ElementName=lblCarrier}" Value=""> 
        <Setter Property="Visibility" Value="Hidden" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </StackPanel.Style> 
    <Label x:Name="lblCarrierGrade" Content="Grade Carrier:" /> 
    <TextBox x:Name="txtCarrierGrade1" /> 
    <TextBox x:Name="txtCarrierGrade2" /> 
</StackPanel>** 

回答

8

可能是Content爲空而不是String.Empty

你可以嘗試使用TargetNullValue

<DataTrigger Binding="{Binding Content, ElementName=lblCarrier,TargetNullValue=''}" Value=""> 
     <Setter Property="Visibility" Value="Hidden" /> 
</DataTrigger> 
+1

非常感謝。 「TargetNullValue =''」是它的工作原理。 – user1884032

+0

+1我也不知道這一點。 –

1

爲什麼不使用轉換器?添加一個類文件到你的項目是這樣的:那麼在資源的地方

xmlns:myNamespace="clr-namespace:[YourProjectName]" 

添加此

<myNamespace:VisibilityConverter x:Key="myConverter"/> 

現在你可以使用它:

class VisibilityConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return string.IsNullOrEmpty(value as string) ? Visibility.Hidden : Visibility.Visible; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

在你Window定義添加此:

<Style TargetType="StackPanel"> 
     <Setter Property="Visibility" 
       Value="{Binding Content, ElementName=lblCarrier, 
           Converter = {StaticResources myConverter}}"/> 
+0

感謝您的建議。我很感激,但我只想簡單而快速地做一些事情,而不必做更多的事情。 – user1884032

+0

好的。我更喜歡這個答案。 :-) –