2015-12-07 135 views
0

我创建了UserControl,它们扩展了ComboBox的基本功能。检查是否有任何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> 

在页我用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是组合框的按钮,打开/关闭下拉

回答

0

我将使用一个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属性并返回正确的可见性。

似乎没有太多的代码mee。

+0

我已经添加转换器'公共对象转换(对象[]值,类型TARGETTYPE,对象参数,System.Globalization.CultureInfo培养) \t \t { \t \t \t VAR集合=(values.Select(System.Convert .ToBoolean)); \t \t \t var retValue = collection.Aggregate(false,(current,item)=> item || current); \t \t \t return retValue? “可见”:“折叠”; ''。目前转换器似乎工作正常,但网格始终可见 – demo

+0

您必须返回Visibility.Visible或Visibility.Collapsed,而不是两个字符串。 – Giangregorio

+0

也没有帮助...嗯 – demo