WPF ListBox MVVM scrollintoview via behavior

复制代码
 public class ListBoxAutoScrollBehavior:Behavior<ListBox>
 {
     protected override void OnAttached()
     {
         base.OnAttached();
         AssociatedObject.SelectionChanged += AssociatedObject_SelectionChanged;
     }

     private void AssociatedObject_SelectionChanged(object sender, SelectionChangedEventArgs e)
     {
         if(sender is ListBox lbx && lbx.SelectedItem!=null)
         {
             lbx.ScrollIntoView(lbx.SelectedItem);
         }
     }

     protected override void OnDetaching()
     {
         AssociatedObject.SelectionChanged -= AssociatedObject_SelectionChanged;
     }
 }





 <ListBox x:Name="lbx" 
          ItemsSource="{Binding BooksCollection,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
          SelectedIndex="{Binding SelectedIdx,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
          VirtualizingPanel.IsContainerVirtualizable="True"
          VirtualizingPanel.IsVirtualizing="True"
          VirtualizingPanel.CacheLength="1"
          VirtualizingPanel.CacheLengthUnit="Item"
          >
     <behavior:Interaction.Behaviors>
         <local:ListBoxAutoScrollBehavior/>
     </behavior:Interaction.Behaviors>
     <ListBox.ItemTemplate>
         <DataTemplate>
             <Border
                 Width="{Binding ActualWidth,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}}}"
                 Height="{Binding ActualHeight,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}}}" >
                 <Border.Background>
                     <ImageBrush ImageSource="{Binding ImgSource}" 
                                 RenderOptions.BitmapScalingMode="Fant"
                                 Stretch="Uniform"/>
                 </Border.Background>
                 <TextBlock Text="{Binding ISBN}"
                            FontSize="50"
                            Foreground="Red"
                            HorizontalAlignment="Center"
                            VerticalAlignment="Center"/>
             </Border>
         </DataTemplate>
     </ListBox.ItemTemplate>
 </ListBox>
复制代码

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @   FredGrit  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示