如何根据另一个TextBlock的绑定属性使TextBlock出现/消失
本文关键字:TextBlock 出现 消失 属性 何根 另一个 绑定 | 更新日期: 2023-09-27 18:28:19
假设我有两个TextBlock
元素,一个是第二个元素的标签,它被绑定:
<TextBlock Margin="0,0,0,0" Text="Notes:" />
<TextBlock Margin="50,0,0,0" Text="{Binding Path=notes}" />
我只希望这两个TextBoxes
在notes!=""
的情况下出现,也就是说,只有在有东西要显示的情况下。怎么办?
谢谢。
有很多方法可以做到这一点,DataTriggers,在ViewModel中执行逻辑,DependencyDrop的代码隐藏,这样你就可以在没有任何触发器的情况下通过绑定来控制一切,等等。或者这里有一个仅在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>
首先创建一个转换器:
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}"/>