WPF ListBoxItem模板中新增CheckBox選中問題
阿新 • • 發佈:2019-02-17
是這樣的,需要一個ListBox來展示照片,並新增一個選中的CheckBox.這就需要對ListBox的ItemTemplate的DataTemplate進行定製.新增一個Image和一個CheckBox.
大概是這樣子的.
問題來了,當我選中CheckBox的時候,我希望ListBoxItem跳轉到當前CheckBox所在的ListBoxItem上.如何實現?<Setter Property="ItemTemplate"> <Setter.Value> <DataTemplate> <Grid Width="250"> <Grid.RowDefinitions> <RowDefinition Height="200"></RowDefinition> <RowDefinition Height="20"></RowDefinition> </Grid.RowDefinitions> <Image Grid.Row="0" Source="{Binding Photo}" Width="220"/> <CheckBox Grid.Row="1" Content="命中" IsChecked="{Binding IsTarget}"></CheckBox> </Grid> </DataTemplate> </Setter.Value> </Setter>
主要有下面兩種方法 :
1.
在Xaml中新增:
在.cs檔案中新增<ListBox.ItemContainerStyle> <Style TargetType="{x:Type ListBoxItem}"> <EventSetter Event="PreviewGotKeyboardFocus" Handler="SelectCurrentItem"/> </Style> </ListBox.ItemContainerStyle>
protected void SelectCurrentItem(object sender, KeyboardFocusChangedEventArgs e)
{
ListBoxItem item = (ListBoxItem)sender;
item.IsSelected = true;
}
2.
在Xaml中新增:
問題解決.<Style TargetType="{x:Type ListBoxItem}"> <Style.Triggers> <Trigger Property="IsKeyboardFocusWithin" Value="true"> <Setter Property="IsSelected" Value="true" /> </Trigger> </Style.Triggers> </Style>
解釋:
對於方法1:
UIElement.PreviewGotKeyboardFocus 事件
在此元素聚焦於鍵盤時發生。由於此事件使用隧道路由,因此具有焦點的元素可能是子元素,而不是實際附加事件處理程式的元素。請檢查事件資料中的 以確定實際具有焦點的元素。http://msdn.microsoft.com/zh-cn/library/system.windows.uielement.previewgotkeyboardfocus.aspx
對於方法2:
UIElement.IsKeyboardFocusWithin 屬性
獲取一個值,該值指示鍵盤焦點是否位於元素或其可視樹子元素內的任意位置。這是一個依賴項屬性。http://msdn.microsoft.com/zh-cn/library/system.windows.uielement.iskeyboardfocuswithin(v=VS.90).aspx?ppud=4