小编Mic*_*hem的帖子

SHIFT + 滚动可在 ScrollViewer UWP 中水平滚动

我想在滚动时按住键盘上的 SHIFT 来ScrollViewer水平滚动。

我从这里了解到,该PointerWheelChanged活动就是我正在寻找的活动。然而,处理它是行不通的,因为它是ScrollViewer在内部处理的,所以我的处理程序永远不会被调用。为了解决这个问题,我使用了“路由事件概述”AddHandler一文中所述的方法。

这有效......但似乎在运行ScrollViewer其内部代码后运行我的代码。其结果是ScrollViewer内容先垂直平移,然后水平平移。它们似乎按照这个顺序发生,并且设置e.Handled = true并不能阻止它。

有没有办法“拦截”滚动,以便我可以用自己的逻辑处理它,从而允许在ScrollViewer按下 SHIFT 时水平平移?我最近在这里问了一个类似的问题(涉及拦截控件的输入,以便我可以用自己的逻辑处理它),其中答案涉及处理不同的事件,该事件发生在控件运行其自己的逻辑之前。我没有看到指针滚动的类似“发生前的事情”事件。

我的代码如下。请注意,ScrollViewer可以水平和垂直滚动以及缩放:

<!-- Contained in Grid in a UserControl, if that's relevant -->
<ScrollViewer Name="MyCanvasScrollViewer"
              VerticalScrollBarVisibility="Auto"
              HorizontalScrollBarVisibility="Auto"
              ZoomMode="Enabled"
              ZoomSnapPointsType="Optional"
              PointerWheelChanged="MyCanvasScrollViewer_PointerWheelChanged">
    <!-- Content to pan -->
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

隐藏代码:

// Constructor for the user contol.
public MyControl()
{
    // Add the scroll wheel event handler and force it to run. …
Run Code Online (Sandbox Code Playgroud)

c# xaml event-handling scrollviewer uwp

4
推荐指数
1
解决办法
1232
查看次数

来自 Async Worker 的 UWP 更新 UI

我正在尝试实施一个长期运行的后台进程,定期报告其进度,以更新 UWP 应用程序中的 UI。我怎样才能做到这一点?我看过几个有用的主题,但没有一个包含所有部分,而且我无法将它们全部放在一起。

例如,考虑一个用户选择了一个非常大的文件,并且应用程序正在读取和/或操作文件中的数据。用户单击一个按钮,该按钮将使用用户选择的文件中的数据填充存储在页面上的列表。

第1部分

页面和按钮的点击事件处理程序如下所示:

public sealed partial class MyPage : Page
{
    public List<DataRecord> DataRecords { get; set; }

    private DateTime LastUpdate;

    public MyPage()
    {
        this.InitializeComponent();

        this.DataRecords = new List<DataRecord>();
        this.LastUpdate = DateTime.Now;

        // Subscribe to the event handler for updates.
        MyStorageWrapper.MyEvent += this.UpdateUI;
    }

    private async void LoadButton_Click(object sender, RoutedEventArgs e)
    {
        StorageFile pickedFile = // … obtained from FileOpenPicker.

        if (pickedFile != null)
        {
            this.DataRecords = await MyStorageWrapper.GetDataAsync(pickedFile);
        }
    }

    private void UpdateUI(long lineCount)
    { …
Run Code Online (Sandbox Code Playgroud)

c# user-interface multithreading async-await uwp

2
推荐指数
1
解决办法
2127
查看次数