有没有办法防止 Xamarin Forms 滚动视图在打开选择器控件时自动滚动到最后编辑的条目?

Posted

技术标签:

【中文标题】有没有办法防止 Xamarin Forms 滚动视图在打开选择器控件时自动滚动到最后编辑的条目?【英文标题】:Is there a way to prevent a Xamarin Forms scrollview from automatically scrolling to the last edited Entry when a picker control is opened? 【发布时间】:2020-11-12 07:35:41 【问题描述】:

我有一个类似这样的设置:

  <ScrollView>
    <StackLayout>    
      <Entry/>
      <Picker/>
      <Entry/>
      <Entry/>
      <Entry/>
      <Picker/>
      <Picker/>
      <Entry/>
      <Entry/>
      <Entry/>
    </StackLayout>

  </ScrollView>

Entry 和 Picker 控件是动态创建和修改的。问题是,如果我输入一个条目,然后打开其中一个 Picker 控件,则 ScrollView 会滚动到先前编辑的条目所在的位置。它正在获得焦点,但我阻止了焦点转移,但 ScrollView 滚动,我似乎无法阻止它。

我做了类似于Is it possible to stop the first Entry getting Focus in a ScrollView in Xamarin Forms 的操作来修复UWP 中的相关问题,但该解决方案不适用于iosandroid

【问题讨论】:

我用 xaml 创建了这个项目。我输入了一个条目,然后打开了一个 Picker 控件,ScrollView 没有滚动到先前编辑的条目所在的位置。你可以看看截图。 imgur.com/o3sS039你能提供更多细节吗? 您可以尝试回复中的代码来重置焦点。您能否提供您的设备版本和 xamarin.form 版本? 【参考方案1】:

设置StackLayout的名称。 Foreach 'StackLayout' 中的元素并重置焦点。

 private void Picker_Focused(object sender, FocusEventArgs e)
    
        foreach (var item in stackLayout.Children)
        
            if (sender!=item)
            
                item.Unfocus();                   
                          
        
    

【讨论】:

仍然滚动到控件,即使它没有获得焦点。我以前试过这个,但为了完整起见我又试了一次。对我不起作用。 滚动发生在 选择器的 Focus 事件触发并完成之后。

以上是关于有没有办法防止 Xamarin Forms 滚动视图在打开选择器控件时自动滚动到最后编辑的条目?的主要内容,如果未能解决你的问题,请参考以下文章

nunit UITest xamarin.forms:如何滚动选择器?

有没有办法在 iOS 项目上禁用 xamarin.forms.maps 上的信息窗口?

有没有办法使用 Xamarin.Forms PCL 项目中的 Devexpress.Xamarin.Android.Charts

有没有办法动画Xamarin.Forms.Maps针运动

Xamarin.Forms - 如果 webView 包含在 Android 上打开的模式或菜单,有没有办法禁用拉刷新?

有没有办法通过读取 csv 文件来填充 Xamarin.Forms 中的 ObservableCollection?