检查是否有任何UserControl处于打开状态

本文关键字:于打开 状态 UserControl 任何 是否 检查 | 更新日期: 2023-09-27 18:26:01

我创建了UserControl,它扩展了ComboBox的基本功能。

<ComboBox
    x:Name="MultiSelectCombo"  
    SnapsToDevicePixels="True"
    OverridesDefaultStyle="True"
    ScrollViewer.HorizontalScrollBarVisibility="Hidden"
    ScrollViewer.VerticalScrollBarVisibility="Auto"
    ScrollViewer.CanContentScroll="True"
    IsSynchronizedWithCurrentItem="True"
    StaysOpenOnEdit="True"
    Background="#61596f"
>
...
</ComboBox>

在页面上,我使用3个控件:

<controls:MultiSelectComboBox SelectedItems="{Binding SelectedCategories, Mode=TwoWay}" Grid.Column="0" Grid.Row="0" x:Name="CategoriesFilter" DefaultText="Category" ItemsSource="{Binding Categories }" Style="{StaticResource FiltersDropDowns}"/>
<controls:MultiSelectComboBox SelectedItems="{Binding SelectedTypes, Mode=TwoWay}" Grid.Column="1" Grid.Row="0" x:Name="TypesFilter" DefaultText="Type" ItemsSource="{Binding Types, Mode=TwoWay}" Style="{StaticResource FiltersDropDowns}"/>
<controls:MultiSelectComboBox SelectedItems="{Binding SelectedBrandsList, Mode=TwoWay}"  Grid.Column="2" Grid.Row="0" x:Name="BrandsFilter" DefaultText="Brand" ItemsSource="{Binding BrandsList}" Style="{StaticResource FiltersDropDowns}"/>

当任何组合框打开时,我需要更改此页面上网格元素Overlay的可见性。

我该怎么做?按名称检查每个项目会产生太多代码。我尝试过这个,但无法访问我的控制的子项目

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

其中ComboBoxToggleButton是打开/关闭下拉的组合框按钮

检查是否有任何UserControl处于打开状态

我将使用MultiBinding

<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是一个IMultiValueConverter,它检查每个绑定控件的isopen属性并返回正确的Visibility。

对我来说似乎没有太多的代码。