从其他类中运行方法将列表框滚动到底部。

问题描述 投票:0回答:1

我想让WPF ListBox自动滚动到底部,我有两个类--一个是Timer.cs,另一个是MainWindow.xaml.cs。我有两个类,一个是Timer.cs,另一个是MainWindow.xaml.cs。

这里是Timer.cs。

using System;
using System.Configuration;
using System.IO;
using System.Threading;
using System.Threading.Tasks;

namespace Importer_WPF
{
    class Timer
    {
        public static readonly string MinutesExecution = ConfigurationManager.AppSettings["MinutesExecution"];
        static System.Threading.Timer timer;

        public static void StartTimer()
        {

            var startTimeSpan = TimeSpan.Zero;
            var periodTimeSpan = TimeSpan.FromMinutes(Convert.ToDouble(MinutesExecution));

            timer = new System.Threading.Timer((e) =>
            {

                Task.Delay(100).ContinueWith(_ => App.Current.Dispatcher.Invoke(() => MainWindow.Names.Add(DateTime.Now.ToString())));

                MainWindow.AutoScroll(); // Problem is here

            }, null, startTimeSpan, periodTimeSpan);

        }

        public static void StopTimer()
        {
            timer.Change(Timeout.Infinite, Timeout.Infinite);
        }
    }
}

MainWindow.xaml.cs:

using System;
using System.Collections.ObjectModel;
using System.Configuration;
using System.IO;
using System.Text.RegularExpressions;
using System.Windows;
using System.Windows.Input;

namespace Importer_WPF
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {

        public static ObservableCollection<string> Names { get; set; }
        public static bool IsCheckedYes { get; set; }

        [Obsolete]
        public MainWindow()
        {

            InitializeComponent();

        }

        public void AutoScroll()
        {
            int itemCount = ConsoleOutput.Items.Count - 1;
            if (itemCount > -1)
                ConsoleOutput.ScrollIntoView(ConsoleOutput.Items[itemCount]);
        }

    }
}

调试器给出了这个消息。

Severity Code Description Project File Line Suppression State Error CS0120 An object reference is required for the non-static field, method, or property 'MainWindow.AutoScroll()' 需要一个对象引用。

有什么提示如何编辑代码结构,使其不会产生错误?

c# wpf
1个回答
1
投票

你需要得到一个对mainwindow类实例的引用,这个实例在内存中。

       ((MainWindow)Application.Current.MainWindow).AutoScroll();
© www.soinside.com 2019 - 2024. All rights reserved.