我有一个StackPanel
多个Expander
s:
<StackPanel Margin="0,10,0,0">
<Expander Header="Test 1">
<ListBox>
<ListBoxItem Content="Unit 1"/>
<ListBoxItem Content="Unit 2"/>
</ListBox>
</Expander>
<Expander Header="Test 2">
<ListBox>
<ListBoxItem Content="Unit 3"/>
<ListBoxItem Content="Unit 4"/>
</ListBox>
</Expander>
</StackPanel>
我想实现这些行为:
Expander
(s)Expander
可以有效(更改标题背景)Expander
,则有效Expander
会发生变化,但如果我选择其他Expander
或该面板外的其他控件,则有效Expander
会停留< / LI>
我怎样才能做到这一点?
答案 0 :(得分:1)
将它们添加到ListControl而不是StackPanel。 ListControls支持选择项目。
XAML:
<Window x:Class="ExpanderTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300" Width="300">
<Window.Resources>
<Style TargetType="ListBoxItem">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red"/>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Red"/>
</Style.Resources>
</Style>
</Window.Resources>
<StackPanel Margin="0,10,0,0">
<ListBox SelectedIndex="1">
<ListBoxItem HorizontalContentAlignment="Stretch">
<Expander Header="Test 1">
<ListBox>
<ListBoxItem Content="Unit 1"/>
<ListBoxItem Content="Unit 2"/>
</ListBox>
</Expander>
</ListBoxItem>
<ListBoxItem HorizontalContentAlignment="Stretch">
<Expander Header="Test 2" >
<ListBox>
<ListBoxItem Content="Unit 3"/>
<ListBoxItem Content="Unit 4"/>
</ListBox>
</Expander>
</ListBoxItem>
</ListBox>
</StackPanel>
</Window>
代码背后:
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace ExpanderTest
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
EventManager.RegisterClassHandler(typeof(UIElement),
GotFocusEvent,
new RoutedEventHandler(OnGotFocus));
}
private static void OnGotFocus(object sender, RoutedEventArgs e)
{
// Check if element that got focus is contained by a listboxitem and
// in that case selected the listboxitem.
DependencyObject parent = e.OriginalSource as DependencyObject;
while (parent != null)
{
ListBoxItem clickedOnItem = parent as ListBoxItem;
if (clickedOnItem != null)
{
clickedOnItem.IsSelected = true;
return;
}
parent = VisualTreeHelper.GetParent(parent);
}
}
}
}
请参阅我对这篇文章的回答后面的代码:link text