如何在WPF ListView中切换滚动锁?
当更多项目添加到ListView
时,根据滚动锁定状态,有足够空间显示以下内容。
当滚动锁定启用时,ListView
在添加更多项目时不应滚动(这是默认行为)。
当滚动锁定禁用时,ListView
应自动滚动到底部,以便用户可以看到新添加的项目。
滚动锁定状态应由典型键盘上的(很少使用)“滚动锁定”按钮控制。
编辑:一些代码...
<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>
答案 0 :(得分:1)
我会将日志消息保存在ObservableCollection中,用于自动UI通知和CollectionChanged事件。添加新项目后,检查是否单击了该按钮。如果是,则移动到最后一项(或者您可以使用事件参数的索引/项属性)。
您需要将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; }
}
答案 1 :(得分:0)
将ScrollViewer.CanContentScroll="False"
放入您的XAML中,这应该有效!