2015-12-07 134 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