假設我有兩個TextBlock
元素,一個是對第二,這勢必標籤:如何使TextBlock基於另一個TextBlock的綁定屬性出現/消失?
<TextBlock Margin="0,0,0,0" Text="Notes:" />
<TextBlock Margin="50,0,0,0" Text="{Binding Path=notes}" />
我只希望這兩個TextBoxes
出現,如果notes!=""
,這只是如果有什麼可以顯示。怎麼會這樣呢?
謝謝。
假設我有兩個TextBlock
元素,一個是對第二,這勢必標籤:如何使TextBlock基於另一個TextBlock的綁定屬性出現/消失?
<TextBlock Margin="0,0,0,0" Text="Notes:" />
<TextBlock Margin="50,0,0,0" Text="{Binding Path=notes}" />
我只希望這兩個TextBoxes
出現,如果notes!=""
,這只是如果有什麼可以顯示。怎麼會這樣呢?
謝謝。
首先創建一個轉換器:
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}"/>
謝謝迭戈。我正在尋找一個包含XAML風格代碼的術語「資源」的文件,但我沒有看到它。假設一個簡單的新Visual Studio 2010 Express項目,應在哪個文件中引用該轉換器?謝謝。 – dotancohen 2012-03-18 01:49:39
您的默認App.xaml應該有一個'
有很多方法可以做到這一點,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>
謝謝,丹尼斯! – dotancohen 2012-03-19 10:41:58
也許從這個問題重複: http://stackoverflow.com/questions/631098/how-to-make-a-text-box -visibility-hidden-with-a-trigger – 2012-03-18 00:15:56