如何在WPF列表视图中切换滚动锁定?
如何在WPF列表视图中切换滚动锁定 当将更多项目添加到如何在WPF列表视图中切换滚动锁定?,wpf,listview,scroll,Wpf,Listview,Scroll,如何在WPF列表视图中切换滚动锁定 当将更多项目添加到列表视图中时,会出现以下情况,具体取决于滚动锁定状态 当启用滚动锁定时,列表视图在添加更多项目时不应滚动(这是默认行为) 当禁用滚动锁定时,列表视图应自动滚动到底部,以便用户可以看到新添加的项目 滚动锁定状态应由典型键盘上的(很少使用)“滚动锁定”按钮控制 编辑:一点代码 <ListView x:Name="logMessagesListView" ItemsSource="{Binding ElementName=self, Path
列表视图中时,会出现以下情况,具体取决于滚动锁定状态
当启用滚动锁定时,列表视图在添加更多项目时不应滚动(这是默认行为)
当禁用滚动锁定时,列表视图应自动滚动到底部,以便用户可以看到新添加的项目
滚动锁定状态应由典型键盘上的(很少使用)“滚动锁定”按钮控制
编辑:一点代码
<ListView x:Name="logMessagesListView" ItemsSource="{Binding ElementName=self, Path=LogMessages}">
<ListView.View>
<GridView>
<GridView.Columns>
<GridViewColumn Header="Created" Width="100" DisplayMemberBinding="{Binding Created}"/>
<GridViewColumn Header="Level" Width="80" DisplayMemberBinding="{Binding LogLevel}"/>
<GridViewColumn Header="Message" Width="350" DisplayMemberBinding="{Binding Message}"/>
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
将ScrollViewer.CanContentScroll=“False”
放在XAML中,这样应该可以工作了 对于自动UI通知和CollectionChanged事件,我会将日志消息保存在ObservableCollection中。添加新项目后,检查按钮是否已单击。如果是,则移动到最后一项(或者可以使用事件参数的索引/项属性)
您需要将System.Windows.Forms添加到项目引用中,以便检查按钮状态
public partial class MainWindow : Window
{
private ObservableCollection<LogMessage> logMessages;
public MainWindow()
{
this.logMessages = new ObservableCollection<LogMessage>();
/* add/load some data */
this.logMessages.CollectionChanged += new NotifyCollectionChangedEventHandler(this.LogMessages_CollectionChanged);
this.LogMessages = CollectionViewSource.GetDefaultView(this.logMessages);
InitializeComponent();
}
public ICollectionView LogMessages
{
get;
set;
}
private void LogMessages_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Add)
{
if (System.Windows.Forms.Control.IsKeyLocked(System.Windows.Forms.Keys.Scroll))
{
this.LogMessages.MoveCurrentToLast();
}
}
}
}
public class LogMessage
{
public string Created
{ get; set; }
public string LogLevel
{ get; set; }
public string Message
{ get; set; }
}
公共部分类主窗口:窗口
{
私有可观察收集日志消息;
公共主窗口()
{
this.logMessages=新的ObservableCollection();
/*添加/加载一些数据*/
this.logMessages.CollectionChanged+=新的NotifyCollectionChangedEventHandler(this.logMessages\u CollectionChanged);
this.LogMessages=CollectionViewSource.GetDefaultView(this.LogMessages);
初始化组件();
}
公共ICollectionView日志消息
{
得到;
设置
}
私有无效日志消息\u CollectionChanged(对象发送方,NotifyCollectionChangedEventArgs e)
{
if(e.Action==NotifyCollectionChangedAction.Add)
{
if(System.Windows.Forms.Control.IsKeyLocked(System.Windows.Forms.Keys.Scroll))
{
this.LogMessages.MoveCurrentToLast();
}
}
}
}
公共类日志消息
{
已创建公共字符串
{get;set;}
公共字符串日志级别
{get;set;}
公共字符串消息
{get;set;}
}
您能发布一个实际问题吗?否则,这将被关闭,因为您没有要求任何内容…问题在标题中,现在也在文本中。我看不出此属性设置为true或false在行为上有任何区别。在我设置“Enabled”之前,我的ListView中的滚动条被锁定“财产归真,谢谢。我使用if(Keyboard.GetKeyStates(Key.Scroll)!=KeyStates.Toggled)logMessagesListView.ScrollIntoView(logMessagesListView.Items.GetItemAt(LogMessages.Count-1)),修改了您的代码以避免引用表单代码>取而代之。