WPF - за один раз нужно открыть только один расширитель в сгруппированном списке - PullRequest
1 голос
/ 29 мая 2010

У меня есть UserControl с шаблонным сгруппированным списком с расширителями, и я хочу, чтобы в любое время был открыт только один расширитель. Я просмотрел сайт, но не нашел ничего, кроме привязки IsExpanded к IsSelected, что не совсем то, что я хочу.

Я пытаюсь поместить в событие Expanded некоторый код, который бы проходил через Expanders и закрывал все те, которые не были переданы в событии Expanded. Я не могу понять, как добраться до них. Я пробовал ListBox.Items.Groups, но не видел, как к ним добраться, и пробовал ListBox.ItemContainerGenerator.ContainerFromItem (или Index), но ничего не вернулось.

Спасибо

Вот текущая разметка:

<ListBox Name="ListBox">
<ListBox.GroupStyle>
<GroupStyle>  
  <GroupStyle.ContainerStyle>  
    <Style TargetType="{x:Type GroupItem}">  
      <Setter Property="Template">  
        <Setter.Value>  
          <ControlTemplate TargetType="{x:Type GroupItem}">  
            <Border BorderBrush="CadetBlue" BorderThickness="1">  
              <Expander BorderThickness="0,0,0,1" Expanded="Expander_Expanded"  
                        Focusable="False"   
                        IsExpanded="{Binding IsSelected,  
                        RelativeSource={RelativeSource FindAncestor, AncestorType=
                                               {x:Type ListBoxItem}}}" >  
                <Expander.Header>  
                  <Grid>  
                    <StackPanel  Height="30" Orientation="Horizontal">  
                      <TextBlock Foreground="Navy"  FontWeight="Bold"  
                                 Text="{Binding Path=Name}" Margin="5,0,0,0"   
                                 MinWidth="200" Padding="3"   
                                 VerticalAlignment="Center" />  
                      <TextBlock Foreground="Navy" FontWeight="Bold"   
                                 Text=" Setups: " VerticalAlignment="Center" 
                                 HorizontalAlignment="Right"/>
                      <TextBlock Foreground="Navy" FontWeight="Bold" 
                                 Text="{Binding Path=ItemCount}" 
                                 VerticalAlignment="Center" 
                                 HorizontalAlignment="Right"  />  
                    </StackPanel>   
                  </Grid>  
                </Expander.Header>  
                <Expander.Content>  
                  <Grid Background="white" >
                    <ItemsPresenter />  
                  </Grid>  
                </Expander.Content>  
                <Expander.Style >  
                  <Style TargetType="{x:Type Expander}">  
                    <Style.Triggers>  
                      <Trigger Property="IsMouseOver" Value="true">  
                        <Setter Property="Background">  
                          <Setter.Value>  
                            <LinearGradientBrush StartPoint="0,0" 
                                                 EndPoint="0,1">  
                              <GradientStop Color="WhiteSmoke"
                                            Offset="0.0" /> 
                              <GradientStop Color="Orange" Offset="1.0" />
                            </LinearGradientBrush>
                          </Setter.Value>
                        </Setter>  
                      </Trigger>
                      <Trigger Property="IsMouseOver" Value="false"
                        <Setter Property="Background">
                          <Setter.Value>
... 

1 Ответ

1 голос
/ 01 сентября 2010

В шаблоне ListBoxItem вы можете использовать RadioButton, которые совместно используют одну и ту же группу, привязать их IsChecked к IsSelected из ListBoxItem и повторно пометить его как Expander, чтобы вы могли привязать IsExpanded к IsChecked TemplatedParent.

...