代码之家  ›  专栏  ›  技术社区  ›  user1884032

基于标签内容的堆叠面板可见性不起作用

  •  6
  • user1884032  · 技术社区  · 12 年前

    我有一个堆栈面板,我想根据标签的内容使其可见。只是不确定为什么它对我不起作用。粗体突出显示的是我想隐藏的东西。有什么建议吗?

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

    2 回复  |  直到 12 年前
        1
  •  9
  •   Richard Friend    12 年前

    可能是因为 Content 为null而不是 String.Empty .

    你可以尝试使用 TargetNullValue

    <DataTrigger Binding="{Binding Content, ElementName=lblCarrier,TargetNullValue=''}" Value="">
          <Setter Property="Visibility" Value="Hidden" />
    </DataTrigger>
    
        2
  •  1
  •   Hossein Narimani Rad    12 年前

    为什么不使用转换器?将类文件添加到您的项目中,如下所示:

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

    在您的 Window 定义添加此:

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

    然后在资源的某个地方添加这个

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

    现在您可以使用它:

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