WPF滚动和焦点改变问题

2024-04-14

我的 WPF 应用程序滚动时遇到问题。

这是交易。我的用户界面如下:

我的应用程序的作用是充当许多应用程序的中心枢纽并启动它们。管理员可以启动其他用户记录的转储。 因此,我有一个ListView,显示应用程序列表,如果需要,可以滚动。 我定义了一个GroupStyle以显示扩展器并模拟 Windows 资源管理器视图。 一切正常,我只是有一个问题:当用鼠标滚轮滚动时,透明蓝色的组件(“启动模式”)似乎抓住了焦点并停止滚动。 这尤其意味着,如果我的鼠标位于此控制之外的任何位置,则滚动是可以的。但是每当鼠标进入这个控件时,我就无法再滚动了。 我尝试修改属性Focusable并将其设置为False我可以到处去,但什么都没有改变。我猜这最终不是焦点问题。 有人知道如何避免滚动被元素捕获吗?

这是扩展器内容的一些(简化的,删除了一些无用的属性,以便尽可能清晰)XAML:

<StackPanel Orientation="Vertical"  VerticalAlignment="Top" >

            <ToggleButton>
                <!-- ToggleButton Content... -->
            </ToggleButton>

            <!-- This is the custom component in which you can see "Launch mode" -->
            <my:UcReleaseChooser >
                <!-- Properties there. I tried to set Focusable to False, no impact... -->
            </my:UcReleaseChooser>

        </StackPanel>

和代码UcReleaseChooser:

<StackPanel HorizontalAlignment="Stretch"
                Focusable="False" ScrollViewer.CanContentScroll="False">

        <ListBox ItemsSource="{Binding ListChosenReleases}" BorderBrush="LightGray" Background="AliceBlue"
                 HorizontalAlignment="Stretch" Focusable="False" ScrollViewer.CanContentScroll="False">

            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Vertical" 
                                Focusable="False" ScrollViewer.CanContentScroll="False"/>
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>

            <ListBox.ItemTemplate>
                <DataTemplate>
                    <DockPanel LastChildFill="True" HorizontalAlignment="Stretch"
                               Focusable="False" ScrollViewer.CanContentScroll="False">
                        <TextBlock DockPanel.Dock="Top"
                            HorizontalAlignment="Left" Text="{Binding Key}" 
                                   FontStyle="Italic"/>
                        <ListBox DockPanel.Dock="Bottom"
                            HorizontalAlignment="Right" ItemsSource="{Binding Value}"
                                 BorderBrush="{x:Null}" Background="AliceBlue"
                                 Focusable="False" ScrollViewer.CanContentScroll="False">
                            <ListBox.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <UniformGrid Focusable="False"/>
                                </ItemsPanelTemplate>
                            </ListBox.ItemsPanel>

                            <ListBox.ItemContainerStyle>
                                <Style TargetType="{x:Type ListBoxItem}">
                                    <-- Blah blah about style -->
                                </Style>
                            </ListBox.ItemContainerStyle>


                            <ListBox.ItemTemplate>
                                <DataTemplate>
                                    <RadioButton Content="{Binding Key}" Margin="3"
                                            IsChecked="{Binding Path=IsSelected, Mode=TwoWay, 
                                                        RelativeSource={RelativeSource FindAncestor, 
                                                            AncestorType={x:Type ListBoxItem}}}" 
                                                 Focusable="False" ScrollViewer.CanContentScroll="False"/>
                                </DataTemplate>
                            </ListBox.ItemTemplate>
                        </ListBox>
                    </DockPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>

        </ListBox>

    </StackPanel>

如您所见,UcReleaseChooser包含一个列表RadioButton列表。我尝试设置Focusable & CanContentScroll to False它似乎在任何地方都合适,但控件不断阻止主 UI 滚动......

我想我应该改变另一个财产......有什么想法吗?

Thanks!


问题是ListBox,或者更具体地说,ScrollViewerListBox的模板。这是获取滚动事件并在外部之前消耗它们ScrollViewer in the ListView甚至看到他们。

我建议更换ListBoxItemsControl如果可能的话。然而,这意味着不会有SelectedItem财产。如果你需要的话,我建议设置ScrollViewer.HorizontalScrollBarVisibility (or VerticalScrollBarVisibility) to Disabled。如果做不到这一点,我只能建议重新模板ListBox不包含ScrollViewer at all.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF滚动和焦点改变问题 的相关文章

随机推荐

  • 私有子方法的原型

    我的代码如下所示 var baseClass function CODE var subClass function MORE CODE 向baseClass添加方法就可以了 我只是使用 baseClass prototype newMet
  • 如何从 XML 文档读取值来构建 ComboBox?

    我正在尝试阅读xml questions tagged xml我想为我妈妈制作的文件 所以基本上这就是我想做的 A ComboBox这将显示 XML 中的所有蔬菜名称 选择一种蔬菜后 第二个ComboBox将在 XML 中显示可以使用第一个
  • 如何使用用户环境在 NodeJS 中执行?

    我正在尝试在 Node 中执行命令 cd www foo path to git bin git exe config list global 基本上 我想执行一个返回全局配置 针对当前用户 的 Git 命令 当我直接在 cli 上执行命令
  • 如何在Spritekit中创建计时器?

    我已经弄清楚如何在单视图应用程序中制作计时器 但没有弄清楚 Spritekit 当我使用以下代码时 出现 2 个错误 如下所示 谁能帮我解决这个问题吗 谢谢 杰克 计时器 if scorelabel scorelabel SKLabelNo
  • Session_End 上的 asp.net 会话变量

    我需要访问 global asax cs 中 Session End 事件上的会话变量 但 HttpContext Current 为空 因此所有会话变量都不可访问 a 我可以以不同的方式访问用户会话 或者 b 在 Session End
  • 为什么以 utf-8 保存的文本文件比其他文件大?

    什么是 UTF 8 编码 为什么以 utf 8 格式保存的文本文件比其他格式的文件大 例如 我在记事本中输入 A 并将其保存为 UTF 8 格式 之后 文件大小变为 4字节 Why 几乎可以肯定 因为您用来保存文件的任何内容也包括字节顺序标
  • ISO15693 (NfcV) / Tag-it HF-I 命令引发标签丢失异常

    当我尝试收发 NFC V Tag it HF I Plus Inlay 标签的命令时 大多数命令都会出现 TagLostException 从我经历过的链接来看 这个异常可能是由不正确的命令引起的 如何为 Nfc V Tag it HF I
  • 如何在不使用“~”的情况下从 sass 加载器中的 node_modules 导入样式表

    我正在设置 Storybook 实例以从 Rails 应用程序加载样式 但它无法在我的应用程序中加载导入main scss文件 两者都是样式表node modules import react table react table css i
  • Hibernate JPA 序列(非 Id)

    是否可以对某些列使用数据库序列不是标识符 不是复合标识符的一部分 我使用 hibernate 作为 jpa 提供程序 并且我有一个表 其中有一些生成值的列 使用序列 尽管它们不是标识符的一部分 我想要的是使用序列为实体创建新值 其中序列的列
  • 合并 JSON 数组

    所以我的目标是合并 json 文件以获得以下格式 title NamesBook list name Ajay name Al 我的文件看起来像这样的格式 等等 json title NamesBook list name Ajay blu
  • 如何使用QtCopyDialog?

    我包括这个库 include
  • 如何在Python中检测两个文件是否相同[重复]

    这个问题在这里已经有答案了 在这种情况下 对 md5sum file1 和 md5sum file2 进行系统调用并比较两个返回值是否足够 如果您想做的不仅仅是检测它们是否不同 或者不信任哈希解决方案 标准库中有一些名为difflib ht
  • 我可以将 pandas.dataframe.isin() 与数字容差参数一起使用吗?

    我事先查看了以下帖子 有没有办法将 DataFrame isin 与近似因子或容差值一起使用 或者还有其他方法可以吗 如果列中的值位于一组值列表中 则过滤数据框行 https stackoverflow com questions 1206
  • 网页中的复选框 - 如何使它们更大?

    大多数浏览器中呈现的标准复选框都非常小 即使使用较大的字体也不会增加大小 显示较大复选框的最佳 独立于浏览器的方式是什么 如果这可以帮助任何人 这里有一个简单的 CSS 作为起点 将其变成一个基本的圆角正方形 大到足以容纳拇指 并具有切换的
  • Windows Phone 8 Facebook 身份验证

    我正在开发一个适用于 Windows Phone 8 的应用程序 我想让用户可以使用他们的 Facebook 帐户登录 这样他们就不必在我的应用程序上创建帐户 我看到了 Facebook SDK for NET 并决定使用它 因为它似乎非常
  • Axios:收到两个请求 OPTIONS 和 POST

    我正在尝试发布数据 一切正常 但我不知道为什么我收到两个请求OPTIONS POST POST OPTIONS 这是代码 const url http rest learncode academy api johnbob myusers e
  • 重叠圆的组合面积

    我最近遇到一个问题 我有四个圆 中点和半径 并且必须计算这些圆的并集面积 示例图片 对于两个圆来说 这很容易 我可以计算不在三角形内的每个圆圈面积的分数 然后计算三角形的面积 但是当有两个以上的圆圈时 我可以使用一种聪明的算法吗 找到外周上
  • Java“相当于”CSLA

    我读过该书的好几章CSLA http www lhotka net cslanet 我喜欢这本书 但最近我更倾向于 Java 所以我正在寻找基于 Java 的等效书 有谁知道任何接近的东西Java 中的 CSLA 我还愿意将其他现有技术很好
  • 一个 RDD 中的值与另一个 RDD 中的值部分/完全匹配

    我有两个 RDD 其中第一个 RDD 具有以下形式的记录 RDD1 1 2017 2 13 ABX 3354 gsfette 2 2017 3 18 TYET 3423 asdsad 3 2017 2 09 TYET 3423 rewriu
  • WPF滚动和焦点改变问题

    我的 WPF 应用程序滚动时遇到问题 这是交易 我的用户界面如下 我的应用程序的作用是充当许多应用程序的中心枢纽并启动它们 管理员可以启动其他用户记录的转储 因此 我有一个ListView 显示应用程序列表 如果需要 可以滚动 我定义了一个