Wpf 如果所有子级都已折叠,如何折叠父级内容
如果每个子项都已折叠,我希望显示/折叠面板(Stakpanel、Grid等),如果至少有一个子项再次可见,则将其显示出来 实现这一目标的最佳方式是什么?(转换器、触发器、其他东西?) 谢谢 我做了一个转换器,但当我改变孩子们的可见性时,它不会启动Wpf 如果所有子级都已折叠,如何折叠父级内容,wpf,xaml,Wpf,Xaml,如果每个子项都已折叠,我希望显示/折叠面板(Stakpanel、Grid等),如果至少有一个子项再次可见,则将其显示出来 实现这一目标的最佳方式是什么?(转换器、触发器、其他东西?) 谢谢 我做了一个转换器,但当我改变孩子们的可见性时,它不会启动 public class HasChildrenVisibilityConverter : IValueConverter { public object Convert(object value, Type targetType, obje
public class HasChildrenVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
Panel parent = value as Panel;
foreach (var child in parent.Children.OfType<UIElement>())
{
if (child.IsVisible)
return Visibility.Visible;
}
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;//no implementado
}
}
public类HasChildrenVisibilityConverter:IValueConverter
{
公共对象转换(对象值、类型targetType、对象参数、CultureInfo区域性)
{
Panel parent=作为Panel的值;
foreach(parent.Children.OfType()中的var child)
{
if(child.IsVisible)
返回可见性。可见;
}
返回可见性。折叠;
}
公共对象转换回(对象值、类型targetType、对象参数、CultureInfo区域性)
{
返回值;//没有实现
}
}
这是xaml示例
<Window.Resources>
<local:HasChildrenVisibilityConverter x:Key="converter" />
</Window.Resources>
<StackPanel Visibility="{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource converter}}">
<TextBlock x:Name="text1"> Text 1</TextBlock>
<TextBlock x:Name="text2"> Text 2</TextBlock>
</StackPanel>
文本1
文本2
AMultiDataTrigger
在这里可以很好地工作。下面是一个简单的示例,其中有一个StackPanel
和两个TextBlock
我在样式中声明触发器,并将该样式应用于相关的StackPanel
MainWindow.xaml
<Window.Resources>
<Style x:Key="ShowHideStyle" TargetType="StackPanel">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding ElementName=txtName, Path=Visibility}" Value="Collapsed" />
<Condition Binding="{Binding ElementName=txtDescription, Path=Visibility}" Value="Collapsed" />
</MultiDataTrigger.Conditions>
<Setter Property="Visibility" Value="Collapsed"/>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding ElementName=txtName, Path=Visibility}" Value="Visible" />
<Condition Binding="{Binding ElementName=txtDescription, Path=Visibility}" Value="Visible" />
</MultiDataTrigger.Conditions>
<Setter Property="Visibility" Value="Visible"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<StackPanel>
<StackPanel Style="{StaticResource ShowHideStyle}" Height="300" Width="300" Background="Red">
<TextBlock x:Name="txtName" Text="name" />
<TextBlock x:Name="txtDescription" Text="description" />
</StackPanel>
<Button x:Name="btnHide" Width="100" Height="30" Content="hide" Click="btnHide_Click"/>
<Button x:Name="btnShow" Width="100" Height="30" Content="show" Click="btnShow_Click"/>
</StackPanel>
parent.Children
在它的集合中有什么吗?是的,它有那两个文本块,但它没有重新评估如何隐藏/折叠孩子们?没有问题,很高兴它有帮助:)
private void btnHide_Click(object sender, RoutedEventArgs e)
{
txtDescription.Visibility = System.Windows.Visibility.Collapsed;
txtName.Visibility = System.Windows.Visibility.Collapsed;
}
private void btnShow_Click(object sender, RoutedEventArgs e)
{
txtDescription.Visibility = System.Windows.Visibility.Visible;
txtName.Visibility = System.Windows.Visibility.Visible;
}