我的应用中出现一个奇怪的UI问题,当ScrollViewer子失去焦点时,TextBox会跳到顶部。我已经尝试在父BringIntoViewOnFocusChange="False"中设置ScrollViewer,但是不幸的是,这并不能解决问题。

这是一个显示我遇到的问题的快速视频:



如您所见,每次对顶部TextBox进行聚焦时,一旦ScrollViewer失去焦点,它就会跳回到顶部(即,当我在下面的ListView中点击某个项目时。)如果单击这些ComboBox控件之一:ScrollViewer仍会立即跳回。

这是您所看到的Popup内容的一般结构:

<UserControl>
    <RelativePanel HorizontalAlignment="Stretch">

        <!--Item name-->
        <TextBlock Text="Name"/>
        <customControls:TextBoxActionButton/>
        <customControls:TextValidatorControl/>

        <!--Section selector-->
        <TextBlock Text="Section"/>
        <customControls:ComboBoxWithResetButton/>

        <!--Item GroupName-->
        <TextBlock Text="Group"/>
        <customControls:ComboBoxWithResetButton/>

        <!--Template based on-->
        <TextBlock Text="Based on"/>
        <customControls:ComboBoxWithResetButton/>

        <!--Icons list and description-->
        <TextBlock Text="Icon"/>
        <ListView ScrollViewer.VerticalScrollMode="Disabled"/>

        <!--Select color text-->
        <TextBlock Text="Select color"/>
        <ListView ScrollViewer.VerticalScrollMode="Disabled"/>
    </RelativePanel>
</UserControl>


我没有任何与父ScrollViewer交互的代码,后者与完全不同的UserControl以及其他Popup UI(标题,底部的按钮等)交互。

我还尝试订阅了第一个LosingFocusTextBox事件,并从那里设置e.Handled = true;,但是那也不起作用。

您是否知道为什么会这样?而且,为什么BringIntoViewOnFocusChange="False"属性在这种情况下不起作用?

谢谢!

最佳答案

我认为问题是TextValidatorControl导致TextBox重新获得焦点,因为当控件不存在时这似乎不会发生。

如果您实际输入有效的名称,请验证会发生什么。如果行为停止了,建议您调查或发布TextValidatorControl的源代码,因为它看起来像是问题的根源。

关于c# - 当TextBox子级失去焦点时,ScrollViewer跳到顶部,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49234312/

10-13 23:48