2011-08-19 5 views
1

ナビゲーションメニューとして使用されるListBoxがあります。アイテムが選択されると、強調表示された状態になります。保存されていない変更がある場合、ページから移動するときにメッセージボックスを実装しました。問題は、ListBoxItemの視覚的な状態がクリック時に選択されるように変更されていることです。クリックからではなく、コードから選択するように状態を変更できるようにする必要があります。Silverlightリストボックス - 選択した状態が発生した場合の変更

Clickイベントをオーバーライドして、ListBoxItemが選択状態にならないようにする方法はありますか?私はVisualStateManager.GoToState(item, "Selected", true)することができます。

もしそうでなければ、ListBoxItemのカスタムビジュアル状態を作成する方法はありますか?

答えて

1

アイテムコンテナからのMouseLeftButtonDownイベントのルーティングを中断し、選択したアイテムをビューモデルから設定する必要があります。例えば:

XAML

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

イベントハンドラ

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; 
} 
関連する問題