如何在WPF ListView中切换滚动锁?

时间:2012-06-28 08:51:16

标签: wpf listview scroll

如何在WPF ListView中切换滚动锁?

当更多项目添加到ListView时,根据滚动锁定状态,有足够空间显示以下内容。

  1. 当滚动锁定启用时,ListView在添加更多项目时不应滚动(这是默认行为)。

  2. 当滚动锁定禁用时,ListView应自动滚动到底部,以便用户可以看到新添加的项目。

  3. 滚动锁定状态应由典型键盘上的(很少使用)“滚动锁定”按钮控制。

    编辑:一些代码...

    <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>
    

2 个答案:

答案 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中,这应该有效!