gpt4 book ai didi

wpf - 触摸界面中的 Slider\ScrollViewer 无法正常工作

转载 作者:行者123 更新时间:2023-12-01 23:12:25 27 4
gpt4 key购买 nike

在 WPF 中,我有以下 XAML:

<ScrollViewer Canvas.Left="2266" Canvas.Top="428" Height="378" Name="scrollViewer1" Width="728" PanningMode="VerticalOnly" PanningRatio="2">
<Canvas Height="1732.593" Width="507.667">
<Slider Height="40.668" x:Name="slider1" Width="507.667" Style="{DynamicResource SliderStyle1}" Canvas.Left="15" Canvas.Top="150" />
</Slider>
</Canvas>
</ScrollViewer>

它是一个包含 slider 的 ScrollViewer。我在触摸屏上使用以下内容,并且甚至使用平移来垂直滚动 ScrollViewer。当设置 PanningMode="VerticalOnly"时, slider 停止工作!

我假设 ScollViewer 正在消耗 touch\slide 事件并在 slider 执行之前处理它(但我认为我在这方面是错误的)。

有什么解决办法吗?

最佳答案

我刚刚在我们的应用程序中解决了这个问题。

发生的情况是 ScrollViewer 在其 PreviewTouchMove 处理程序中捕获 TouchDevice,该处理程序从其他控件中“窃取”TouchDevice 并阻止它们接收任何 PreviewTouchMove 或 TouchMove 事件。

为了解决此问题,您需要实现一个自定义 Thumb 控件,该控件捕获 PreviewTouchDown 事件中的 TouchDevice 并存储对其的引用,直到发生 PreviewTouchUp 事件为止。然后,在适当的时候,控件可以将捕获“窃取”回其 LostTouchCapture 处理程序中。这是一些简短的代码:

public class CustomThumb : Thumb
{
private TouchDevice currentDevice = null;

protected override void OnPreviewTouchDown(TouchEventArgs e)
{
// Release any previous capture
ReleaseCurrentDevice();
// Capture the new touch
CaptureCurrentDevice(e);
}

protected override void OnPreviewTouchUp(TouchEventArgs e)
{
ReleaseCurrentDevice();
}

protected override void OnLostTouchCapture(TouchEventArgs e)
{
// Only re-capture if the reference is not null
// This way we avoid re-capturing after calling ReleaseCurrentDevice()
if (currentDevice != null)
{
CaptureCurrentDevice(e);
}
}

private void ReleaseCurrentDevice()
{
if (currentDevice != null)
{
// Set the reference to null so that we don't re-capture in the OnLostTouchCapture() method
var temp = currentDevice;
currentDevice = null;
ReleaseTouchCapture(temp);
}
}

private void CaptureCurrentDevice(TouchEventArgs e)
{
bool gotTouch = CaptureTouch(e.TouchDevice);
if (gotTouch)
{
currentDevice = e.TouchDevice;
}
}
}

然后您将需要重新模板化 slider 以使用 CustomThumb 而不是默认的 Thumb 控件。

关于wpf - 触摸界面中的 Slider\ScrollViewer 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8369040/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com