It is difficult to freeze first several columns when scrolling horizontal scroll bar in a ListView. You could set FrozenColumnCount="2"
in the DataGrid to freeze the first two columns when scrolling the horizontal scroll bar. The following are examples of ListView workaround and DataGrid.
The code of xaml:
<Grid>
<ListView x:Name="lv" Height="300" Width="170" HorizontalAlignment="Left" >
<ListView.View>
<GridView >
<GridViewColumn Header="Id" Width="80" DisplayMemberBinding="{Binding Id}" />
<GridViewColumn Header="Name" Width="80" DisplayMemberBinding="{Binding Name}"/>
</GridView>
</ListView.View>
</ListView>
<ListView x:Name="lv2" Margin="170,55,400,35" Height="320" Width="200" HorizontalAlignment="Left" >
<ListView.View>
<GridView ScrollViewer.CanContentScroll="True" >
<GridViewColumn Header="Age" Width="80" DisplayMemberBinding="{Binding Age}"/>
<GridViewColumn Header="Address" Width="80" DisplayMemberBinding="{Binding Address}"/>
<GridViewColumn Header="School" Width="80" DisplayMemberBinding="{Binding School}"/>
<GridViewColumn Header="Gender" Width="80" DisplayMemberBinding="{Binding Gender}"/>
</GridView>
</ListView.View>
</ListView>
<DataGrid x:Name="dg" Width="200" HorizontalAlignment="Right" FrozenColumnCount="2" >
</DataGrid>
</Grid>
The code of xaml.cs:
using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace ListViewScorll
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
ObservableCollection<Person> samplePersons = new ObservableCollection<Person>();
for(int i = 0; i < 20; i++)
{
samplePersons.Add(new Person() {Id=i, Name = "name"+i, Age = i + 10,Address="address"+i,School="school"+i,Gender="boy" } );
}
lv.ItemsSource = samplePersons;
lv2.ItemsSource = samplePersons;
dg.ItemsSource = samplePersons;
}
ScrollViewer sv1, sv2;
private void Window_Loaded(object sender, RoutedEventArgs e)
{
sv1 = VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(this.lv, 0), 0) as ScrollViewer;
sv2 = VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(this.lv2, 0), 0) as ScrollViewer;
sv1.VerticalScrollBarVisibility = ScrollBarVisibility.Hidden;
sv1.ScrollChanged += new ScrollChangedEventHandler(sv1_ScrollChanged);
sv2.ScrollChanged += new ScrollChangedEventHandler(sv2_ScrollChanged);
}
void sv1_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
sv1.ScrollToVerticalOffset(sv1.VerticalOffset);
}
void sv2_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
sv1.ScrollToVerticalOffset(sv2.VerticalOffset);
}
}
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Address { get; set; }
public string School { get; set; }
public string Gender { get; set; }
}
}
The picture of result:
If the response is helpful, please click "Accept Answer" and upvote it.
Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.