2013-03-28 18 views
5

Ich habe ein Stack-Panel, das ich anhand des Inhalts eines Labels sichtbar machen möchte. Nur nicht sicher, warum es nicht für mich arbeitet. Was fett hervorgehoben ist, ist was ich verstecken möchte. Irgendein Vorschlag?Stackpanel-Sichtbarkeit basierend auf Label-Inhalt funktioniert nicht

<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>** 

Antwort

8

Es könnte sein, dass die Content null ist anstatt String.Empty.

könnten Sie versuchen, TargetNullValue

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

Vielen Dank. Der "TargetNullValue = ''" hat es geschafft. – user1884032

+0

+1 Ich kannte diesen Punkt auch nicht. –

1

Warum nicht einen Konverter? Fügen Sie eine Klasse-Datei Ihr Projekt wie folgt aus:

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(); 
    } 
} 

In Ihrer Window Definition fügen Sie diese:

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

Dann irgendwo in den Ressourcen hinzufügen, um dieses

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

Jetzt können Sie es verwenden, :

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

Dank für Ihre Anregung verwenden. Ich schätze es, aber ich wollte einfach etwas Einfaches und Schnelles, ohne mehr zu tun. – user1884032

+0

OK. Ich würde diese Antwort bevorzugen. :-) –

Verwandte Themen