C# 检查是否有任何UserControl处于打开状态
我创建了C# 检查是否有任何UserControl处于打开状态,c#,wpf,combobox,user-controls,C#,Wpf,Combobox,User Controls,我创建了UserControl,它扩展了组合框的基本功能 <ComboBox x:Name="MultiSelectCombo" SnapsToDevicePixels="True" OverridesDefaultStyle="True" ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Auto"
UserControl
,它扩展了组合框的基本功能
<ComboBox
x:Name="MultiSelectCombo"
SnapsToDevicePixels="True"
OverridesDefaultStyle="True"
ScrollViewer.HorizontalScrollBarVisibility="Hidden"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.CanContentScroll="True"
IsSynchronizedWithCurrentItem="True"
StaysOpenOnEdit="True"
Background="#61596f"
>
...
</ComboBox>
其中,ComboBoxToggleButton
是打开/关闭下拉列表的comboBox按钮我将使用多重绑定
<Grid>
<Grid.Visibility>
<MultiBinding Mode="OneWay" Converter={StaticResource OpenToVisibilityConverter}>
<Binding ElementName="CategoriesFilter" Path="[a Open property on your UserControl]" />
<Binding ElementName="TypesFilter" Path="[a Open property on your UserControl]" />
<Binding ElementName="BrandsFilter" Path="[a Open property on your UserControl]" />TypesFilter
</MultiBinding>
</Grid.Visibility>
</Grid>
类型过滤器
其中OpenToVisibilityConverter是一个IMMultiValueConverter,用于检查每个绑定控件的isopen属性并返回正确的可见性
似乎没有太多代码可供使用。我添加了转换器公共对象转换(对象[]值,类型targetType,对象参数,System.Globalization.CultureInfo culture){var collection=(值。选择(系统。转换。ToBoolean));var retValue=collection.Aggregate(false,(当前,项)=>项| |当前);返回retValue?“可见”:“折叠”}
。当前转换器工作正常,但网格始终可见。您必须返回可见性。可见或可见性。折叠,不是两个字符串。也没有帮助…hmmm现在没问题。我应该从系统.Windows
命名空间开始使用enum可见性
。谢谢
<Grid.Style>
<Style TargetType="Grid">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked, ElementName=ComboBoxToggleButton}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>
<Grid>
<Grid.Visibility>
<MultiBinding Mode="OneWay" Converter={StaticResource OpenToVisibilityConverter}>
<Binding ElementName="CategoriesFilter" Path="[a Open property on your UserControl]" />
<Binding ElementName="TypesFilter" Path="[a Open property on your UserControl]" />
<Binding ElementName="BrandsFilter" Path="[a Open property on your UserControl]" />TypesFilter
</MultiBinding>
</Grid.Visibility>
</Grid>