关于我的listbox / wrappanel箭头导航,我有一个奇怪的问题。
我的列表框:
<ListBox x:Name="List"
IsSynchronizedWithCurrentItem="True"
SelectedIndex="{Binding MainIndex, Mode=OneWayToSource}"
SelectedItem="{Binding CurrentFeed, Mode=TwoWay}"
ItemsSource="{Binding CurrentFeedList}"
ScrollViewer.HorizontalScrollBarVisibility="Disabled" >
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel IsItemsHost="True" MaxWidth="{Binding ActualWidth, ElementName=Panel}" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Width="168">
<Border BorderBrush="White" BorderThickness="0" Margin="0,7,0,0">
<Image Source="{Binding Image , Converter={StaticResource ByteArraytoImageSource}}" Width="150" Height="213" ></Image>
</Border>
<Border BorderBrush="White" BorderThickness="0" Height="65" HorizontalAlignment="Center" >
<TextBlock VerticalAlignment="Center" TextWrapping="Wrap" FontFamily="{StaticResource DefaultFontFamily}" FontSize="15" Text="{Binding Title}" Foreground="White" Cursor="Hand" HorizontalAlignment="Center" TextAlignment="Center"/>
</Border>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
渲染: Render of Listbox http://muby53.free.fr/render.png
渲染很棒没问题! ;)
正如您所看到的,它是从RSS中检索到的壁纸列表。
我绑定了一个快捷方式,使一个项目重新加入,然后将其从ObservableCollection中删除:
<UserControl.InputBindings>
<KeyBinding Key="D" Modifiers="Control" Command="{Binding ReadCmd}" />
</UserControl.InputBindings>
在我的视图模型中:
ObservableCollection<Feed> CurrentFeedList { get; set; }
private Feed _currentFeed;
public Feed CurrentFeed
{
get { return _currentFeed; }
set
{
_currentFeed = value;
OnPropertyChanged("CurrentFeed");
}
}
public ICommand ReadCmd { get; set; }
public int MainIndex { get; set; }
我的ReadCmd是一个调用“ReadAction”方法的RelayCommand。
一开始我只是从ObservableCollection中删除该项,但我想两次输入Ctrl + D来读取2项。
所以我决定获取列表框的索引,并在删除一个索引后选择相同的索引。
private void ReadAction()
{
int previousIndex = MainIndex;
if (previousIndex == CurrentFeedList.Count - 1)
previousIndex -= 1;
CurrentFeedList.Remove(CurrentFeed);
CurrentFeed = CurrentFeedList[previousIndex];
}
这是我想要的工作,但仍有一个问题,我无法解决。
当我按下Ctrl + D时,SelectedItem将被删除,下一个项目将被选中。但是当我使用箭头键导航在列表上导航时,它每次都会跳转到列表的第一项。
我希望它足够清楚。
谢谢你。
答案 0 :(得分:0)
此问题是由于当您使用KeyBinding
删除项目时,ListBox
会失去焦点,因此在按下箭头键后会将焦点放在{{1}的第一项上1}}。
因此,为了使您的箭头键能够从所选项目开始工作,您还必须将焦点设置为ListBox
的选定项目。
有几种方法可以做到这一点,例如使用附加行为将焦点设置在Listbox
上。最简单的方法是捕获ListBox的ListBoxItem
事件,并在处理程序中设置焦点,如下所示:
SelectionChanged