2013-03-28 13 views
5

Mam panel stosu, który chcę uwidocznić na podstawie zawartości etykiety. Tylko nie wiem, dlaczego to nie działa dla mnie. To, co podkreślono pogrubieniem, to to, co chcę ukryć. Jakieś sugestie?widoczność stosu dokumentów na podstawie treści etykiety nie działa

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

Odpowiedz

8

Możliwe, że Content ma wartość zerową, a nie String.Empty.

Mógłbyś spróbować użyć TargetNullValue

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

Dziękuję bardzo. "TargetNullValue =" "" sprawiło, że działało. – user1884032

+0

+1 Ja też nie znałem tego punktu. –

1

Dlaczego nie za pomocą konwertera? Dodaj plik klasy do projekcji tak:

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

W swojej definicji Window dodać to:

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

Potem gdzieś w zasobach dodaj

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

Teraz można go używać :

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

dzięki za sugestię. Doceniam to, ale chciałem czegoś prostego i szybkiego, bez konieczności robienia więcej. – user1884032

+0

OK. Wolałbym tę odpowiedź. :-) –

Powiązane problemy