2012-03-18 48 views
0

假設我有兩個TextBlock元素,一個是對第二,這勢必標籤:如何使TextBlock基於另一個TextBlock的綁定屬性出現/消失?

<TextBlock Margin="0,0,0,0" Text="Notes:" /> 
<TextBlock Margin="50,0,0,0" Text="{Binding Path=notes}" /> 

我只希望這兩個TextBoxes出現,如果notes!="",這只是如果有什麼可以顯示。怎麼會這樣呢?

謝謝。

+0

也許從這個問題重複: http://stackoverflow.com/questions/631098/how-to-make-a-text-box -visibility-hidden-with-a-trigger – 2012-03-18 00:15:56

回答

1

首先創建一個轉換器:

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

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

然後引用它(你可以在你的應用程序的資源做到這一點,在視圖資源等:

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:Converters="clr-namespace:MyConverterNamespace"> 
    <Converters:EmptyStringToVisibilityConverter 
     x:Key="EmptyStringToVisibilityConverter"/> 
</ResourceDictionary> 

然後在你的控件使用它:

<TextBlock Margin="0,0,0,0" Text="Notes:" 
      Visibility="{Binding notes, 
       Converter={StaticResource EmptyStringToVisibilityConverter}"/> 
<TextBlock Margin="50,0,0,0" Text="{Binding Path=notes}" 
      Visibility="{Binding notes, 
       Converter={StaticResource EmptyStringToVisibilityConverter}"/> 
+0

謝謝迭戈。我正在尋找一個包含XAML風格代碼的術語「資源」的文件,但我沒有看到它。假設一個簡單的新Visual Studio 2010 Express項目,應在哪個文件中引用該轉換器?謝謝。 – dotancohen 2012-03-18 01:49:39

+0

您的默認App.xaml應該有一個''元素。 – 2012-03-18 11:03:46

2

有很多方法可以做到這一點,DataTriggers,在您的ViewModel中執行邏輯,在代碼中執行DependencyProp的代碼所以你可以通過綁定來控制所有的東西,而不需要任何觸發器等。 或者這裏只是一個在XAML中做的示例。

複製/粘貼/運行此代碼:

<Control> 
     <Control.Style> 
      <Style TargetType="Control"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="Control"> 
          <StackPanel x:Name="stackPanel"> 
           <TextBlock Margin="0,0,0,0" Text="Notes:" /> 
           <TextBlock x:Name="txtNotes" Margin="50,0,0,0" Text="{Binding Path=notes}" /> 
          </StackPanel> 
          <ControlTemplate.Triggers> 
           <Trigger SourceName="txtNotes" Property="TextBlock.Text" Value=""> 
            <Setter TargetName="stackPanel" Property="Control.Visibility" Value="Collapsed"/> 
           </Trigger> 
          </ControlTemplate.Triggers> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </Control.Style> 
    </Control> 
+0

謝謝,丹尼斯! – dotancohen 2012-03-19 10:41:58

相關問題