확장기가있는 템플릿 그룹화 된 목록 상자가있는 UserControl이 있고 언제든지 하나의 확장기 만 열려 있어야합니다. 사이트를 탐색했지만 IsExpanded를 IsSelected에 바인딩하는 것 외에는 아무것도 찾지 못했습니다. 이는 내가 원하는 것만은 아닙니다.WPF - 그룹화 된 목록 상자에서 한 번에 하나의 확장기 만 열려 있어야합니다.
Expanded 이벤트를 통해 루프를 반복하고 Expanded 이벤트에서 전달 된 확장 이벤트가 아닌 모든 이벤트를 닫는 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>
...
'왜 당신이 원하는가?' –
다른 답변을 이해하면 사용자는 목록 상자에서 항목을 선택하여 확장기를 모두 닫아야합니다. 내 경우에는 사용자가 항목을 찾고 실제로 아무것도 선택하지 않았으며 시각적 검색을 위해 확장기를 열었습니다. 우리는 언제든지 열리는 하나의 확장기/그룹 만 화면의 실제 공간에 저장하기를 원합니다. 나는 IsSelected에 IsExpanded를 바인딩하여 어떤 일이 일어나는지 보았지만 아무 일도 일어나지 않았다. –
Portsmouth
알아 냈습니다. MSDN 사이트에서 블로그를 발견했습니다. 코드 sugggestion에 약간의 수정을 가하고 내 컨트롤의 Expanded 이벤트에 넣었습니다. 트릭은 ItemsPresenter로 이동 한 다음 Children을 통해 ItemsPresenter의 각 항목의 확장자까지 드릴 다운하는 것입니다. 제 경우에는 아이들이 ItemPresenter StackPanel, Border 및 Expander였습니다. http://social.msdn.microsoft.com/forums/en-us/wpf/thread/2D228F89-CF9F-4CCA-9AC1-00AC70049F74 – Portsmouth