 <p>The storyboard animation retains a reference to the item until the animation is complete.</p> <p>You should do the following:</p> <ol> <li>Move storyboards into resources, enabling you to access them from code behind.</li> <li>Create a field to reference the MyItem to be deleted.</li> <li>Set that field when "Delete" button is clicked</li> <li>Attach a StoryBoard.Completed event handler to the "fadeOut" storyboard, that removes the MyItem to be deleted from your collection, once the storyboard animation is done.</li> </ol> <p>Here is a solution that works:</p> <p>Code-behind:</p> <pre><code>using System; using System.Collections.ObjectModel; using System.Windows; using System.Windows.Input; using System.Windows.Media.Animation; namespace WpfApplication2 { /// &lt;summary&gt; /// Interaction logic for MainWindow.xaml /// &lt;/summary&gt; public partial class MainWindow : Window { private MyItem _itemToDelete; public ICommand DeleteCommand { get; private set; } public MainWindow() { InitializeComponent(); DeleteCommand = new MyCommand&lt;MyItem&gt;(Delete); this.Loaded += MainWindow_Loaded; } void MainWindow_Loaded(object sender, RoutedEventArgs e) { var fadeOutStoryBoard = TryFindResource("fadeOut"); if (fadeOutStoryBoard != null &amp;&amp; fadeOutStoryBoard is Storyboard) { (fadeOutStoryBoard as Storyboard).Completed += fadeOutStoryBoard_Completed; } } void fadeOutStoryBoard_Completed(object sender, EventArgs e) { if (this._itemToDelete != null) { MyItems myItems = Resources["myItems"] as MyItems; myItems.Remove(this._itemToDelete); } } private void Delete(MyItem myItem) { this._itemToDelete = myItem; } } public class MyItem : DependencyObject { public static readonly DependencyProperty NameProperty = DependencyProperty.Register("Name", typeof(string), typeof(MyItem)); public string Name { get { return (string)GetValue(NameProperty); } set { SetValue(NameProperty, value); } } } public class MyItems : ObservableCollection&lt;MyItem&gt; { } public class MyCommand&lt;T&gt; : ICommand { private readonly Action&lt;T&gt; executeMethod = null; private readonly Predicate&lt;T&gt; canExecuteMethod = null; public MyCommand(Action&lt;T&gt; execute) : this(execute, null) { } public MyCommand(Action&lt;T&gt; execute, Predicate&lt;T&gt; canExecute) { executeMethod = execute; canExecuteMethod = canExecute; } public event EventHandler CanExecuteChanged; public void NotifyCanExecuteChanged(object sender) { if (CanExecuteChanged != null) CanExecuteChanged(sender, EventArgs.Empty); } public bool CanExecute(object parameter) { return canExecuteMethod != null &amp;&amp; parameter is T ? canExecuteMethod((T)parameter) : true; } public void Execute(object parameter) { if (executeMethod != null &amp;&amp; parameter is T) executeMethod((T)parameter); } } } </code></pre> <p>XAML:</p> <pre><code> &lt;Window x:Class="WpfApplication2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:WpfApplication2" Title="MainWindow" Height="350" Width="525" DataContext="{Binding RelativeSource={RelativeSource Self}}"&gt; &lt;Window.Resources&gt; &lt;local:MyItems x:Key="myItems"&gt; &lt;local:MyItem Name="Item 1" /&gt; &lt;local:MyItem Name="Item 2" /&gt; &lt;local:MyItem Name="Item 3" /&gt; &lt;/local:MyItems&gt; &lt;Style TargetType="{x:Type ListBoxItem}"&gt; &lt;Setter Property="OverridesDefaultStyle" Value="True" /&gt; &lt;Setter Property="Template"&gt; &lt;Setter.Value&gt; &lt;ControlTemplate TargetType="{x:Type ListBoxItem}"&gt; &lt;ContentPresenter Margin="0,0,0,4" /&gt; &lt;/ControlTemplate&gt; &lt;/Setter.Value&gt; &lt;/Setter&gt; &lt;/Style&gt; &lt;Storyboard x:Key="fadeIn"&gt; &lt;DoubleAnimation Duration="0:0:0.2" Storyboard.TargetName="controlBox" Storyboard.TargetProperty="Opacity" To="1" /&gt; &lt;/Storyboard&gt; &lt;Storyboard x:Key="fadeOut"&gt; &lt;DoubleAnimation Duration="0:0:0.2" Storyboard.TargetName="controlBox" Storyboard.TargetProperty="Opacity" To="0" /&gt; &lt;/Storyboard&gt; &lt;/Window.Resources&gt; &lt;Grid&gt; &lt;ListBox ItemsSource="{StaticResource myItems}"&gt; &lt;ListBox.ItemTemplate&gt; &lt;DataTemplate&gt; &lt;Border Margin="5" Padding="5" BorderBrush="Blue" BorderThickness="1"&gt; &lt;Border.Triggers&gt; &lt;EventTrigger RoutedEvent="MouseEnter"&gt; &lt;BeginStoryboard Storyboard="{StaticResource fadeIn}"&gt; &lt;/BeginStoryboard&gt; &lt;/EventTrigger&gt; &lt;EventTrigger RoutedEvent="MouseLeave"&gt; &lt;BeginStoryboard Storyboard="{StaticResource fadeOut}"&gt; &lt;/BeginStoryboard&gt; &lt;/EventTrigger&gt; &lt;/Border.Triggers&gt; &lt;Grid&gt; &lt;Grid.ColumnDefinitions&gt; &lt;ColumnDefinition Width="*" /&gt; &lt;ColumnDefinition Width="Auto" /&gt; &lt;/Grid.ColumnDefinitions&gt; &lt;TextBlock Grid.Column="0" Text="{Binding Name}" /&gt; &lt;StackPanel Grid.Column="1" x:Name="controlBox" Opacity="0"&gt; &lt;Button Command="{Binding DataContext.DeleteCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type local:MainWindow}}}" CommandParameter=" {Binding}"&gt;Delete&lt;/Button&gt; &lt;/StackPanel&gt; &lt;/Grid&gt; &lt;/Border&gt; &lt;/DataTemplate&gt; &lt;/ListBox.ItemTemplate&gt; &lt;/ListBox&gt; &lt;/Grid&gt; &lt;/Window&gt; </code></pre>