首页 > 其他分享 >WPF Datagrid AutoScroll via behavior

WPF Datagrid AutoScroll via behavior

时间:2024-11-26 23:14:50浏览次数:4  
标签:via dg void AssociatedObject SelectionChanged Datagrid OnAttached AutoScroll WPF

public class DataGridAutoScrollBehavior:Behavior<DataGrid>
{
    protected override void OnAttached()
    {
        base.OnAttached();
        AssociatedObject.SelectionChanged += AssociatedObject_SelectionChanged;
    }

    private void AssociatedObject_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        var dg= sender as DataGrid;
        if (dg!=null && dg.SelectedItem!=null)
        {
            dg.ScrollIntoView(dg.SelectedItem);
        }
    }

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





<Window x:Class="WpfApp47.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:behavior="http://schemas.microsoft.com/xaml/behaviors"
        WindowState="Maximized"
        xmlns:local="clr-namespace:WpfApp47"
        mc:Ignorable="d"
        Title="{Binding SelectedBk.ISBN}" Height="450" Width="800">
    <Window.DataContext>
        <local:BookVM/>
    </Window.DataContext>
    <Grid>
        <DataGrid ItemsSource="{Binding BooksCollection,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
                  SelectedItem="{Binding SelectedBk,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
                  SelectedIndex="{Binding SelectedIdx,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
                  AutoGenerateColumns="False"
                  CanUserAddRows="False"
                  VirtualizingPanel.IsContainerVirtualizable="True"
                  VirtualizingPanel.IsVirtualizing="True"
                  VirtualizingPanel.CacheLength="1"
                  VirtualizingPanel.CacheLengthUnit="Item">
            <behavior:Interaction.Behaviors>
                <local:DataGridAutoScrollBehavior/>
            </behavior:Interaction.Behaviors>             
            <DataGrid.Columns>               
                <DataGridTemplateColumn Header="Image">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <local:ImgTbk UCImgSource="{Binding DataContext.ImgSource,
                                RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow}}}"
                                          UCStr="{Binding DataContext.ISBN,
                                RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow}}}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>

 

 

 

标签:via,dg,void,AssociatedObject,SelectionChanged,Datagrid,OnAttached,AutoScroll,WPF
From: https://www.cnblogs.com/Fred1987/p/18571151

相关文章

  • WPF Datagrid DataGridTemplateColumn DataTemplate UserControl MVVM
    //uercontrol<UserControlx:Class="WpfApp47.ImgTbk"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc=&......
  • WPF 粉笔绘制
    在做白板书写的时候,会有各种笔的绘制,比如书写笔、马克笔、演示笔等等。粉笔的功能需求也是很有必要的。上网搜了一圈,几乎没有绘制粉笔的。有的是毛笔、楷体等绘制的如下博客:wpfinkcanvascustomink毛笔效果_wpfinkcanvas笔锋-CSDN博客【WPF】InkCanvas书写毛笔效果-CSD......
  • WPF笔记6——静态资源(StaticResource) 与 动态资源(DynamicResource)
    示例代码1前台代码:点击查看代码<Windowx:Class="TestWPF.Window1"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://sc......
  • WPF篇:触发器(Triggers)
    文章目录前言一、触发器简介二、开始1.属性触发器(Trigger)2.事件触发器(EventTrigger)3.数据触发器(DataTrigger)前言今天来记录一下WPF中的触发器(Triggers),触发器是WPF动态界面设计的灵魂所在,触发器是WPF中实现动态UI和交互的强大工具一、触发器简介触发器,顾名思义,就......
  • 【WPF】Prism P1
    视频参考:https://www.bilibili.com/video/BV1nY411a7T8 一、元素布局<Windowx:Class="WPF_Practical.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winf......
  • WPF笔记5——动态资源(DynamicResource)
    动态资源(DynamicResource)是WPF中的一种引用资源的方式,即在运行是查找资源。与StaticResource性比,DynamicResource的性能稍差,因为每次要资源时,都要进行查找。如果资源是在引用它的元素之后定义的,或者资源的值在应用程序运行期间发生变化,那么使用DynamicResource引用的员会自动更......
  • WPF笔记4——静态资源(StaticResource)
    在WPF中,资源(Resource)是一种存储和共享对象的方式,可以在应用程序的不同部分之间重用。在WPF中,有两种资源引用方式:静态资源(StaticResource)和动态资源(DynamicResource)静态资源(StaticResource)静态资源,用于在xaml加载时解析并应用资源。它通常用于引用在资源字典中定义的对象,如样式......
  • 界面控件DevExpress WPF v24.2新功能预览 - 支持DateOnly & TimeOnly
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。无论是Office办公软件的衍伸产品,还是以数据为中心......
  • WPF RichTextBox MouseLeftButtonUp事件未触发的问题
    在自定义Richtextbox中,给Richtextbox订阅MouseLeftButtonUp事件用于处理自定义任务,程序运行后发现自定义MouseLeftButtonUp未触发。概念WPF中的隧道事件和冒泡事件冒泡事件(Bubbling):这类事件从UI元素触发,并沿着元素树向上传播至根元素。在冒泡阶段,事件会从子元素传递给父......
  • WPF笔记3——x:Name 与 Name
    在WPF中,给Button控件的x:Name和Name属性都可以用来指定控件的名称,如下:点击查看代码<Buttonx:Name="button1">click1</Button><ButtonName="button2">click2</Button>虽然它们在功能上是等价的。但是,它们之间是有差异的。x:Name这个属性是XAML命名......