我使用StoryBoard为ListBox的SelectedIndex设置动画。
<Storyboard x:Key="FlipBook" RepeatBehavior="Forever">
<Int32AnimationUsingKeyFrames Storyboard.TargetProperty="(Selector.SelectedIndex)" Storyboard.TargetName="FlipBookView">
<EasingInt32KeyFrame KeyTime="0" Value="0"/>
<EasingInt32KeyFrame KeyTime="0:0:1" Value="1"/>
<EasingInt32KeyFrame KeyTime="0:0:2" Value="0"/>
</Int32AnimationUsingKeyFrames>
</Storyboard>
当SelectedIndex发生变化时,我希望ListBox自动(并立即)滚动到该项目。
我相信ListBox。ScrollIntoView将完全按照我的意愿行事,但我需要在SelectedIndex更改时自动触发它。
这可能吗?
答案 0 :(得分:2)
我要做的是使用Behaviors
创建System.Windows.Interactivity
。您必须在项目中手动引用它。
给定一个不会公开SelectedItems
的控件,例如(ListBox,DataGrid)
您可以创建类似这样的行为类
public class ListBoxSelectedItemsBehavior : Behavior<ListBox>
{
protected override void OnAttached()
{
AssociatedObject.SelectionChanged += AssociatedObjectSelectionChanged;
}
protected override void OnDetaching()
{
AssociatedObject.SelectionChanged -= AssociatedObjectSelectionChanged;
}
void AssociatedObjectSelectionChanged(object sender, SelectionChangedEventArgs e)
{
// Assuming your selection mode is single.
AssociatedObject.ScrollIntoView(e.AddedItems[0]);
}
在XAML
Binding
我会i
这样xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
behaviors
而Behavior
是<ListBox>
<i:Interaction.Behaviors>
<behaviors:ListBoxSelectedItemsBehavior/>
</i:Interaction.Behaviors>
</ListBox>
的命名空间类
DataContext
假设ListBox
的{{1}}在SelectedItems
中有ViewModel
属性,则会自动更新SelectedItems
。你已经封装了从event
订阅的View
,即
<ListBox SelectionChanged="ListBox_SelectionChanged"/>
如果需要,您可以将Behavior
类更改为DataGrid
类型。