2011-04-06 11 views
42

नीचे दिए गए एक्सएएमएल में, मेरे पास कभी-कभी फ़ोन के लिए मूल्य नहीं है। जब ऐसा होता है, तो मान गुम है, लेकिन TextBlock अभी भी पैनल में स्थान पर कब्जा कर रहा है। मैं StackPanel में जगह लेने से खाली TextBlock एस छिपाना चाहता हूं।खाली टेक्स्टब्लॉक कैसे छिपाना है?

यहाँ XAML है:

<StackPanel> 
    <TextBlock Text="{Binding Path=FirstName}" /> 
    <TextBlock Text="{Binding Path=LastName}" /> 
    <TextBlock Text="{Binding Path=Phone}" /> 
    <TextBlock Text="{Binding Path=Email}" /> 
</StackPanel> 

मैं this article पढ़ा है, लेकिन उसे स्वीकार जवाब मेरे लिए काम नहीं करता है:

<StackPanel> 
    <TextBlock Text="{Binding Path=FirstName}" /> 
    <TextBlock Text="{Binding Path=LastName}" /> 
    <TextBlock Text="{Binding Path=Phone}"> 
     <TextBlock.Style> 
      <Style TargetType="TextBlock"> 
       <Style.Triggers> 
        <Trigger Property="Text" Value="{x:Null}"> 
         <Setter Property="Visibility" Value="Collapsed" /> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </TextBlock.Style> 
    </TextBlock> 
    <TextBlock Text="{Binding Path=Email}" /> 
</StackPanel> 

मैंने कहीं एक गलती कर रहा हूँ, न ही स्वीकृत है गलत जवाब? मेरा लक्ष्य प्राप्त करने के लिए मुझे क्या करना चाहिए? , इसके बजाय सिर्फ इस के लिए एक शैली शुरू करने की

<TextBlock Text="{Binding Path=Title}"> 
    <TextBlock.Style> 
     <Style TargetType="TextBlock"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Title}" Value="{x:Null}"> 
        <Setter Property="Visibility" Value="Collapsed" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock> 
+0

एक फोन संपत्ति String.Empty या अशक्त जब यह या बनाई गई है नष्ट कर दिया है? –

+0

यह शून्य है। समस्या हल हो गई है :) – Boris

उत्तर

62

आप शायद उपयोग करने की आवश्यकता इस तरह की चीज के लिए मैं कनवर्टर का उपयोग करना पसंद करता हूं जो एक शून्य या खाली स्ट्रिंग को संभालेगा।

<TextBlock Text="{Binding Foo}" 
      Visibility="{Binding Foo, 
         Converter={StaticResource StringToVisibilityConverter}}" /> 

कहाँ StringToVisibilityConverter इस तरह परिभाषित किया गया है:

[ValueConversion(typeof(string), typeof(Visibility))] 
public class StringToVisibilityConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (string.IsNullOrEmpty((string)value)) 
     { 
      return Visibility.Collapsed; 
     } 
     else 
     { 
      return Visibility.Visible; 
     } 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+1

चेकबॉक्स के दाईं ओर पाठ सहित, मेरे लेबल में से प्रत्येक को छिपाने का उत्सुक प्रभाव पड़ता है। अच्छा नहीं :) –

10

आप एक DataTrigger उपयोग कर सकते हैं:

<Style TargetType="TextBlock"> 
     <Style.Triggers> 
      <Trigger Property="Text" Value=""> 
       <Setter Property="Visibility" Value="Collapsed" /> 
      </Trigger> 
     </Style.Triggers> 
</Style> 

या शायद दोनों:

36

:

<Style TargetType="TextBlock"> 
     <Style.Triggers> 
      <Trigger Property="Text" Value=""> 
       <Setter Property="Visibility" Value="Collapsed" /> 
      </Trigger> 
      <Trigger Property="Text" Value="{x:Null}"> 
       <Setter Property="Visibility" Value="Collapsed" /> 
      </Trigger> 
     </Style.Triggers> 
</Style> 
+0

मैं आम तौर पर डेटा को कनवर्ट करने के लिए कनवर्टर का उपयोग करता हूं ताकि इसे अंतिम उपयोगकर्ता के लिए अधिक उपयोगकर्ता के अनुकूल बनाया जा सके, लेकिन आपका कोड ठीक काम करता है। फिर भी, मैं अपने परिदृश्य के लिए शैलियों को पसंद करता हूं। किसी भी जवाब के लिए धन्यवाद! – Boris

+0

आम तौर पर मैं इसके साथ सहमत हूं लेकिन कनवर्टर में निर्मित एक को देखें जो डब्ल्यूपीएफ जहाजों: बूलियन टीविज़िबिलिटी कनवर्टर। यह सही काम करता है जो आप कर रहे हैं लेकिन बूलियन मानों के साथ –

+0

+1 दो ट्रिगर्स को सघन करने के लिए हमेशा अच्छा होता है जो एक ही कार्य को एक में करते हैं। – CodeNaked

संबंधित मुद्दे