События MouseOver и IsSelected для ListBoxItem в WPF - PullRequest
0 голосов
/ 19 октября 2011

Я хочу, чтобы ListBoxItem запускал два события, которые я могу перехватить из внешнего пользовательского элемента управления, который содержит ListBox. Вот что я получил до сих пор:

<ListBox 
            Background="Black"
            Selected="listbox_selected"
            x:Name="listBox">

            <ListBox.Resources>
                <Style TargetType="ListBoxItem" BasedOn="{StaticResource {x:Type ListBoxItem}}">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding IsMouseOver,RelativeSource={RelativeSource Self}}" 
                         Value="True">
                            <Setter Property="IsSelected" Value="True" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ListBox.Resources>
        </ListBox>

Теперь это вызывает мое событие listbox_Selected. То, что я хочу, это вызов другого события или свойства, когда IsMouseOver. Просто чтобы прояснить, я знаю, как изменить фон / передний план или другие свойства самого ListBoxItem. Но я хочу изменить что-то от бабушки и дедушки.

1 Ответ

1 голос
/ 20 октября 2011

У вас уже есть это событие ... Обрабатывать статическое перенаправленное событие из класса ListBoxItem с именем "Selected" (и также есть "UnSelected") у любого предка, при условии, что мы не обрабатываем событие "Selection" где-либодерево потомков ...

  <Window x:Class="...."
          ...
          ListBoxItem.Selected="OnListBoxSelected">  
   <Grid>
      <ListBox ItemsSource="{Binding Employees}"
               DispalyMemberPath="Name"
               selectedValuePath="ID" >
        <ListBox.Resources>
            <Style TargetType="ListBoxItem"
                   BasedOn="{StaticResource
                                {x:Type ListBoxItem}}">
                <Style.Triggers>
                   <DataTrigger Binding="{Binding IsMouseOver,
                                            RelativeSource={RelativeSource
                                              Self}}"
                                Value="True">
                         <Setter Property="IsSelected"
                                 Value="True" />
                  </DataTrigger>
               </Style.Triggers>
           </Style>
       </ListBox.Resources> 
      </ListBox>
   </Grid>
 </Window>

И в коде позади ...

    private void OnListBoxSelected(object sender, RoutedEventArgs e)
    {
        var window = sender as Window;
        var listBoxItem = e.OriginalSource as ListBoxItem;
        var selectedItem = listBoxItem.DataContext;
    }

Надеюсь, это поможет ...

...