Ik heb een TabControl met daarin wat TabItems. Sommige TabItems moeten sluitbaar zijn, dus ik heb met Expression Blend de standaard TabItem style geïmporteerd zodat ik er een sluitknopje in kon hangen. Alles goed en wel, tot ik wat fancier dingen wilde doen, namelijk de border om het knopje laten oplichten als je met de muis erboven hovert. Grofweg komt het in XAML hierop neer:
Deze Border zit dus ergens in een ControlTemplate die wordt gezet als Template door de Style die wordt toegepast op een TabItem:
In de TabItem_Close handler zoek ik simpelweg omhoog in de visual tree naar het TabItem wat erbij hoort, zodat ik die weg kan halen uit de lijst met Tabs.
Echter, zodra ik dat doe treedt er een exception op:
Maar dan is de exception ineens:
.
Iemand enig idee hoe ik dit kan oplossen?
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| <Border MouseDown="TabItem_Close" BorderBrush="#FF747474"> <!-- mijn sluitknopje --> <!-- meuk --> <Border.Triggers> <EventTrigger RoutedEvent="Mouse.MouseEnter"> <BeginStoryboard Name="EnterStoryBoard"> <Storyboard> <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)"> <LinearColorKeyFrame KeyTime="0:0:0.25" Value="#FF747474"/> </ColorAnimationUsingKeyFrames> </Storyboard> </BeginStoryboard> </EventTrigger> <EventTrigger RoutedEvent="Mouse.MouseLeave"> <BeginStoryboard Name="LeaveStoryBoard"> <Storyboard> <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)"> <LinearColorKeyFrame KeyTime="0:0:0.25" Value="#00747474"/> </ColorAnimationUsingKeyFrames> </Storyboard> </BeginStoryboard> </EventTrigger> </Border.Triggers> </Border> |
Deze Border zit dus ergens in een ControlTemplate die wordt gezet als Template door de Style die wordt toegepast op een TabItem:
XML:
1
| <TabItem Header="Bla" Style="{DynamicResource ClosableTabItem}"/> |
In de TabItem_Close handler zoek ik simpelweg omhoog in de visual tree naar het TabItem wat erbij hoort, zodat ik die weg kan halen uit de lijst met Tabs.
Echter, zodra ik dat doe treedt er een exception op:
Hmm, ok, blijkbaar blijft het storyboard doorlopen nadat het control verwijderd is. Een zoektocht op internet bevestigt dit vermoeden. Ok, dan maar even de storyboards verwijderen bij een Unload, dus tussen de EventTriggers van de Border:A first chance exception of type 'System.InvalidOperationException' occurred in PresentationFramework.dll
Additional information: 'BorderBrush' property does not point to a DependencyObject in path '(0).(1)'.
XML:
1
2
3
4
5
6
| <EventTrigger RoutedEvent="FrameworkElement.Unloaded"> <EventTrigger.Actions> <RemoveStoryboard BeginStoryboardName="EnterStoryBoard" /> <RemoveStoryboard BeginStoryboardName="LeaveStoryBoard" /> </EventTrigger.Actions> </EventTrigger> |
Maar dan is de exception ineens:
Het lijkt dus net alsof hij de context volledig kwijt is. Daarom werkt die animatie niet meer, maar ik kan die animaties ook niet meer stoppenA first chance exception of type 'System.InvalidOperationException' occurred in PresentationFramework.dll
Additional information: 'EnterStoryBoard' name cannot be found in the name scope of 'System.Windows.Controls.Border'.

Iemand enig idee hoe ik dit kan oplossen?
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.