2

我有看起来像这样的 xaml

<ListBox>
<ListBox.ItemTemplate>
    <DataTemplate>
        <StackPanel>
            <TextBlock Text="{Binding Name}" />
            <StackPanel Orientation="Vertical" x:Name="contentPanel" >
            Content goes here...
            </StackPanel>
        </StackPanel>
    </DataTemplate>
</ListBox.ItemTemplate>

列表框绑定到一个具有名为 ShowContent 的 bool 属性的对象。如果 ShowContent 的对象为 false,我如何让 silverlight 隐藏 contentPanel?

4

2 回答 2

4

编写一个 BoolToVisibility IValueConveter 并使用它绑定到 contentPanel 的 Visibility 属性

<StackPanel Visibility="{Binding YourBoolProperty, Converter={StaticResource boolToVisibilityResourceRef ..../>

您可以在任何地方轻松找到 BoolToVisibility。

如果您是新手,请检查 IValueConveter。http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx

于 2009-03-24T23:14:59.980 回答
1

我建议在 ListBoxItem 级别设置 ListBoxItem 可见性,否则由于默认填充和边框值,您最终会得到很小的空列表框项目,例如

<ListBox>
     <ListBox.Resources>
          <Style TargetType="ListBoxItem">
               <Setter Property="Visibility" Value="{Binding MyItem.IsVisible, Converter={StaticResource BooleanToVisibilityConverter}}" />
          </Style>
     </ListBox.Resources>
     <ListBox.ItemTemplate>
          <DataTemplate>
               <StackPanel Orientation="Vertical">
                    <CheckBox Content="{Binding MyItemName}" IsChecked="{Binding IsVisible, Mode=TwoWay}"/>
               </StackPanel>
          </DataTemplate>
     </ListBox.ItemTemplate>
</ListBox>

这隐藏了整个 ListBoxItem 而不仅仅是它的内容。

于 2013-01-08T05:39:39.320 回答