Just edited the first group box in your simple code:
<GroupBox Margin="8,0" BorderBrush="#FF88B1D8" Height="150"> <GroupBox.Resources> <Style TargetType="GroupBox"> <Style.Triggers> <EventTrigger RoutedEvent="CheckBox.Unchecked"> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetProperty="Height" Duration="0:0:.2" To="30" /> </Storyboard> </BeginStoryboard> </EventTrigger> <EventTrigger RoutedEvent="CheckBox.Checked"> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetProperty="Height" Duration="0:0:.2" /> </Storyboard> </BeginStoryboard> </EventTrigger> </Style.Triggers> </Style> </GroupBox.Resources> <GroupBox.Header> <WrapPanel> <CheckBox IsChecked="True" VerticalAlignment="Center" /> <Label Content="Volatility" Background="#00000000" Foreground="#FF0033FF" FontWeight="Bold" /> </WrapPanel> </GroupBox.Header> <UniformGrid Columns="2"> <Label Content="Spots"></Label> <TextBox AcceptsReturn="False" AcceptsTab="True" AllowDrop="True" IsTabStop="True" /> <Label Content="Hist. references" /> <TextBox AcceptsReturn="False" AcceptsTab="True" AllowDrop="True" IsTabStop="True" /> <Label Content="Tenors" /> <TextBox AcceptsReturn="False" AcceptsTab="True" AllowDrop="True" IsTabStop="True" /> </UniformGrid> </GroupBox>
If you want to have this in one group field, you can put a style element inside this code
<GroupBox.Resources> </GroupBox.Resources>
to implement it in one group field.
Another suggestion is to create a style inside the stack panel and add a key to it:
<StackPanel.Resources> <Style TargetType="GroupBox" x:Key="groupBoxStyle"> <Style.Triggers> <EventTrigger RoutedEvent="CheckBox.Unchecked"> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetProperty="Height" Duration="0:0:.2" To="30" /> </Storyboard> </BeginStoryboard> </EventTrigger> <EventTrigger RoutedEvent="CheckBox.Checked"> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetProperty="Height" Duration="0:0:.2" /> </Storyboard> </BeginStoryboard> </EventTrigger> </Style.Triggers> </Style> </StackPanel.Resources>
then tied it to the group box style:
<GroupBox Margin="8,0" Height="150" BorderBrush="Transparent" Style="{StaticResource groupBoxStyle}"> <GroupBox.Header> <WrapPanel> <CheckBox IsChecked="True" VerticalAlignment="Center" /> <Label Content="Volatility" Background="#00000000" Foreground="#FF0033FF" FontWeight="Bold" /> </WrapPanel> </GroupBox.Header> <Border BorderBrush="Black" BorderThickness="2"> <UniformGrid Columns="2"> <Label Content="Spots"></Label> <TextBox AcceptsReturn="False" AcceptsTab="True" AllowDrop="True" IsTabStop="True" /> <Label Content="Hist. references" /> <TextBox AcceptsReturn="False" AcceptsTab="True" AllowDrop="True" IsTabStop="True" /> <Label Content="Tenors" /> <TextBox AcceptsReturn="False" AcceptsTab="True" AllowDrop="True" IsTabStop="True" /> </UniformGrid> </Border> </GroupBox>
this approach will be more useful if you want to implement this in the future for multiple group boxes
In case you want to process a flag and an unchecked event, you can use this code
<GroupBox Margin="8,0" Height="150" BorderBrush="Transparent" Style="{StaticResource groupBoxStyle}" CheckBox.Checked="CheckBox_Checked" CheckBox.Unchecked="CheckBox_Unchecked"> <GroupBox.Header> <WrapPanel> <CheckBox x:Name="chkHeader" IsChecked="True" VerticalAlignment="Center" /> <Label Content="Volatility" Background="#00000000" Foreground="#FF0033FF" FontWeight="Bold" /> </WrapPanel> </GroupBox.Header> <Border BorderBrush="Black" BorderThickness="2"> <UniformGrid Columns="2"> <Label Content="Spots"></Label> <TextBox AcceptsReturn="False" AcceptsTab="True" AllowDrop="True" IsTabStop="True" /> <Label Content="Hist. references" /> <TextBox AcceptsReturn="False" AcceptsTab="True" AllowDrop="True" IsTabStop="True" /> <Label Content="Tenors" /> <TextBox AcceptsReturn="False" AcceptsTab="True" AllowDrop="True" IsTabStop="True" /> </UniformGrid> </Border> </GroupBox>
and add this to the code behind:
private void CheckBox_Checked(object sender, RoutedEventArgs e) { if ((e.OriginalSource as CheckBox).Name != "chkHeader") { e.Handled = true; } } private void CheckBox_Unchecked(object sender, RoutedEventArgs e) { if ((e.OriginalSource as CheckBox).Name != "chkHeader") { e.Handled = true; } }