2011-08-19 2 views
1

У меня есть ListBox, который используется в качестве навигационного меню. Когда элемент выбран, он имеет выделенное состояние. Я теперь внедрил окно сообщения при навигации вне страницы, если есть несохраненные изменения. Проблема заключается в том, что визуальное состояние ListBoxItem изменяется на выбранное после клика. Мне нужно иметь возможность изменять состояние, выбранное из кода, а не по щелчку.Silverlight ListBox - Change When Selected State Occurs

Есть ли способ переопределить событие click, чтобы он не приводил ListBoxItem к выбранному состоянию? Тогда я мог бы сделать VisualStateManager.GoToState(item, "Selected", true).

Если нет, существует ли способ создать пользовательское визуальное состояние для ListBoxItem?

ответ

1

Вы должны прервать маршрутизацию события MouseLeftButtonDown из контейнера элементов и установить выбранный элемент из модели просмотра. Например:

XAML

<ListBox x:Name="lb"> 
    <ListBoxItem> 
     <TextBlock MouseLeftButtonDown="TextBlock_OnMouseLeftButtonDown" Text="Test"/> 
    </ListBoxItem> 
</ListBox> 

Event Handler

private void TextBlock_OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
     //interrups item selection 
     e.Handled = true; 
     //here you can show "Do you want navigate from?" dialog 
     // and if user accepts then show selected item in menu using SelectedItem or SelectedIndex 
     lb.SelectedIndex = 0; 
}