为什么 ComboBox 是下拉结果整个应用程序性能非常慢?

2024-02-16

我有一个wpf应用程序。有一个奇怪的事情,只要我按下鼠标,ComboBox下拉箭头就会变得所有UI响应都很慢,无论ComboBox是否有项目。 烦人的情况只出现在某些计算机上。 期待答复。


我查看了您可以在互联网上找到的提示,我发现没有任何问题。

应仔细遵循以下事项,否则虚拟化就会消失(摘自 MSDN,link http://msdn.microsoft.com/en-us/library/cc716879.aspx):

  • 项目容器直接添加到 ItemsControl。例如,如果应用程序显式地将 ListBoxItem 对象添加到 ListBox,则 ListBox 不会虚拟化 ListBoxItem 对象。
  • 将 CanContentScroll 设置为 false。
  • 将 IsVirtualizing 设置为 false。
  • 使用项目分组。

以下样式对我来说没有问题。

<Style x:Key="SimpleComboBox" TargetType="{x:Type ComboBox}">
  <Setter Property="ItemsPanel">
    <Setter.Value>
      <ItemsPanelTemplate>
        <VirtualizingStackPanel IsItemsHost="True" VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Recycling" KeyboardNavigation.DirectionalNavigation="Contained" />
      </ItemsPanelTemplate>
    </Setter.Value>
  </Setter>
</Style>

<ComboBox Name="cbTest" IsEditable="True" Style="{StaticResource SimpleComboBox}" />


在我玩了一段时间之后Kaxaml http://kaxaml.com/,我注意到了一件小事。对于这种风格,我在使用时遇到了问题IsEditable = "True",性能下降!

以下风格对我来说很完美

<Style x:Key="SimpleComboBox" TargetType="{x:Type ComboBox}">
  <Setter Property="SnapsToDevicePixels" Value="true"/>
  <Setter Property="OverridesDefaultStyle" Value="true"/>
  <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
  <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
  <Setter Property="ScrollViewer.CanContentScroll" Value="true"/>
  <Setter Property="MinWidth" Value="120"/>
  <Setter Property="MinHeight" Value="20"/>
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type ComboBox}">
        <Grid>
          <ToggleButton Name="ToggleButton" Focusable="false" ClickMode="Press"
                        IsChecked="{Binding Path=IsDropDownOpen,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}">
            <ToggleButton.Template>
              <ControlTemplate TargetType="{x:Type ToggleButton}">
                <Grid>
                  <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition Width="20" />
                  </Grid.ColumnDefinitions>
                  <Border x:Name="Border" Grid.ColumnSpan="2" CornerRadius="2" Background="#C0C0C0" BorderBrush="#404040" BorderThickness="1" />
                  <Border Grid.Column="0" CornerRadius="2,0,0,2" Margin="1" Background="#FFFFFF" BorderBrush="#404040" BorderThickness="0,0,1,0" />
                  <Path x:Name="Arrow" Grid.Column="1" Fill="#404040" HorizontalAlignment="Center" VerticalAlignment="Center" Data="M 0 0 L 4 4 L 8 0 Z"/>
                </Grid>
                <ControlTemplate.Triggers>
                  <Trigger Property="ToggleButton.IsMouseOver" Value="true">
                    <Setter TargetName="Border" Property="Background" Value="#808080" />
                  </Trigger>
                  <Trigger Property="ToggleButton.IsChecked" Value="true">
                    <Setter TargetName="Border" Property="Background" Value="#E0E0E0" />
                  </Trigger>
                  <Trigger Property="IsEnabled" Value="False">
                    <Setter TargetName="Border" Property="Background" Value="#EEEEEE" />
                    <Setter TargetName="Border" Property="BorderBrush" Value="#AAAAAA" />
                    <Setter Property="Foreground" Value="#888888"/>
                    <Setter TargetName="Arrow" Property="Fill" Value="#888888" />
                  </Trigger>
                </ControlTemplate.Triggers>
              </ControlTemplate>
            </ToggleButton.Template>
          </ToggleButton>
          <ContentPresenter Name="ContentSite" IsHitTestVisible="False"
            Content="{TemplateBinding SelectionBoxItem}"
            ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
            ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
            Margin="3,3,23,3"
            VerticalAlignment="Center"
            HorizontalAlignment="Left" />
          <TextBox x:Name="PART_EditableTextBox" Style="{x:Null}" HorizontalAlignment="Left" VerticalAlignment="Center"
                   Margin="3,3,23,3" Focusable="True" Background="Transparent" Visibility="Hidden" IsReadOnly="{TemplateBinding IsReadOnly}">
            <TextBox.Template>
              <ControlTemplate TargetType="{x:Type TextBox}">
                <Border x:Name="PART_ContentHost" Focusable="False" Background="{TemplateBinding Background}" />
              </ControlTemplate>
            </TextBox.Template>
          </TextBox>
          <Popup Name="Popup" Placement="Bottom" IsOpen="{TemplateBinding IsDropDownOpen}" AllowsTransparency="True" Focusable="False" PopupAnimation="Slide">
            <Grid Name="DropDown" SnapsToDevicePixels="True" MinWidth="{TemplateBinding ActualWidth}" MaxHeight="{TemplateBinding MaxDropDownHeight}">
              <Border x:Name="DropDownBorder" Background="#FFFFFF" BorderThickness="1" BorderBrush="#888888"/>
              <ScrollViewer Margin="4,6,4,6" SnapsToDevicePixels="True">
                <VirtualizingStackPanel IsItemsHost="True" VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Recycling" KeyboardNavigation.DirectionalNavigation="Contained" />
              </ScrollViewer>
            </Grid>
          </Popup>
        </Grid>
        <ControlTemplate.Triggers>
          <Trigger Property="HasItems" Value="false">
            <Setter TargetName="DropDownBorder" Property="MinHeight" Value="95"/>
          </Trigger>
          <Trigger Property="IsEnabled" Value="false">
            <Setter Property="Foreground" Value="#888888"/>
          </Trigger>
          <!-- remove this trigger, because the virtualization is broken!!!
          <Trigger Property="IsGrouping" Value="true">
            <Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
          </Trigger>
          -->                
          <Trigger SourceName="Popup" Property="Popup.AllowsTransparency" Value="true">
            <Setter TargetName="DropDownBorder" Property="CornerRadius" Value="4"/>
            <Setter TargetName="DropDownBorder" Property="Margin" Value="0,2,0,0"/>
          </Trigger>
          <Trigger Property="IsEditable"
                   Value="true">
            <Setter Property="IsTabStop" Value="false"/>
            <Setter TargetName="PART_EditableTextBox" Property="Visibility" Value="Visible"/>
            <Setter TargetName="ContentSite" Property="Visibility" Value="Hidden"/>
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
  <Style.Triggers>
  </Style.Triggers>
</Style>

我也删除了这个触发器。

<Trigger Property="IsGrouping" Value="true">
  <Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
</Trigger>

希望这可以帮助

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

为什么 ComboBox 是下拉结果整个应用程序性能非常慢? 的相关文章

  • IronPython 中批量求值表达式的性能

    在 C 4 0 应用程序中 我有一个具有相同长度的强类型 IList 的字典 一个基于动态强类型列的表 我希望用户根据将在所有行上聚合的可用列提供一个或多个 python 表达式 在静态上下文中它将是 IDictionary
  • 具有独特矩阵转置问题的 2D 分块

    我有类型的复杂值数据struct complex double real 0 0 double imag 0 0 以 3 阶张量的形式组织 底层容器具有与内存页边界对齐的连续内存布局 The natural slicing directio
  • 针对 Android 开发优化 Eclipse

    我使用 Eclipse 和 ADT 插件开发 Android 而且速度 很慢 我必须经常重新启动 当我打开各种 Android 项目 当我使用库项目时需要 时 情况会变得更糟 使用 ADT 插件时 是否可以进行任何具体优化来提高 Eclip
  • 快速检查网络速度

    我想从我的 swift 应用程序检查网络速度 我发现很多帖子描述了Reachability特别是查找连接是否可达以及是 WIFI 连接还是 WWAN 连接的方法 我的问题 是否可以检测 WWAN 的类型 2G 3G 4G 你可以用以下命令检
  • 使用 RenderTargetBitmap 的 WPF 画布区域的快照

    我想在我的应用程序中创建画布区域的快照 我使用 Visual Brush 来获取快照并使用 PngEncoder 保存相同的快照 但生成的 PNG 只是一个空的黑色图像 我不确定问题是与创建的 BitmapSource 还是 PNGEnco
  • 我的 C# .NET 团队是否应该迁移到 Windows Presentation Foundation? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 MVVM 中,可以在视图后面的代码中访问 ViewModel 吗?

    在 MVVM 模式中 是否可以接受甚至可以访问视图代码后面的 ViewModel 属性 我有一个可观察的集合 它填充在 ViewModel 中 我需要在视图中使用它来绑定到带有链接列表的无限滚动条 IE private LinkedList
  • WPF KeyGestures - 绑定非字母数字键

    Should be a simple one but I can t work out how to do it Using WPF4 I want to Bind Ctrl to Zoom Out and Ctrl to Zoom In
  • Mono 实现 CLR 吗?或者至少有一些非托管的内部调用?或无?

    我们知道 C 使用非托管代码 如 P Invoke 或 CLR 实现的代码 如 InternalCall 我想知道的是 mono 它自己实现了一个完整的 CLR 还是只是一些非托管代码或者什么都没有 我可以使用 Net Reflactor或
  • 以编程方式绑定 WPF 中的附加属性

    我在用着杰森 坎普很酷CueBanner class http www ageektrapped com blog the missing net 4 cue banner in wpf i mean watermark in wpf 对于
  • 调整屏幕和字体设置的 WPF 应用程序(或者,我如何将 DLU 与 WPF 中的单元相关联?)

    在MFC中 对话框的设计使用DLUs http msdn microsoft com en us library bb847924 aspx 在 WPF 中 我们以 1 96 英寸为单位指定 虽然这确实会缩放窗口和视觉元素 但我们如何使 W
  • 索引在 NOT IN 或 <> 子句中起作用吗?

    我读过 至少 Oracle 数据库中的普通索引基本上是 B 树结构 因此存储处理适当根节点的记录 小于 根的记录被迭代地存储在树的左侧部分 而 大于 根的记录被存储在右侧部分 正是这种存储方法有助于通过树遍历实现更快的扫描 因为深度和广度都
  • 记录类名、方法名和行号的性能影响

    我正在我的 java 应用程序中实现日志记录 以便我可以调试应用程序投入生产后可能出现的潜在问题 考虑到在这种情况下 人们不会奢侈地使用 IDE 开发工具 以调试模式运行事物或单步执行完整代码 因此在每条消息中记录类名 方法名和行号将非常有
  • 如何处理多个连接

    我有一个复杂的查询 需要总共 4 个表中的字段 内部联接导致查询花费的时间比应有的时间长得多 我已经运行了一个 EXPLAIN 语句 其可视化结果附在下面 这是我的查询 SELECT pending corrections correcte
  • WPF ListBoxItem 双击?

    WPF ListBox 没有 DoubleClick 事件 至少据我所知没有 是否有针对此问题的解决方法 让我双击某个项目即可让事件处理程序对其执行某些操作 感谢您的帮助 可以将带有参数的命令绑定到ListBoxItem不使用代码隐藏 or
  • 每个 mmap/access/munmap 两次 TLB 未命中

    for int i 0 i lt 100000 i int page mmap NULL PAGE SIZE PROT READ PROT WRITE MAP ANONYMOUS MAP PRIVATE 1 0 page 0 0 munma
  • 如何在 AppleScript 的处理程序中有效地构建列表?

    AppleScript 文档建议使用以下代码来有效构建列表 set bigList to set bigListRef to a reference to bigList set numItems to 100000 set t to ti
  • WPF DataGrid 的 Items 和 ItemsSource 属性之间有什么区别?

    从我从 Intellisense 收集到的信息来看 区别在于返回类型 并且 ItemsSource 有一个 setter 而 Items 只有一个 getter 但实际上 我不明白这两个属性需要彼此分开 而不仅仅是作为一个属性 有人可以向我
  • 哪个更快:清除集合或实例化新集合

    我的代码中有一些通用列表 其中有数十或数百个元素 有时我需要用其他对象重新填充此列表 所以问题是 调用什么会更快Clear 方法或创建一个new List
  • 在哪里可以找到Python内置序列类型的时间和空间复杂度

    我一直无法找到此信息的来源 无法亲自查看 Python 源代码来确定这些对象是如何工作的 有谁知道我可以在网上找到这个吗 结帐时间复杂度 http wiki python org moin TimeComplexitypy dot org

随机推荐

  • 在我的应用程序中禁用多指触摸[重复]

    这个问题在这里已经有答案了 我的应用程序使用一个 Activity 来托管多个片段 每次在手机屏幕上显示一个片段 每个片段的视图由多个图像图标组成 目前 用户可以按两个图标同时地用两根手指 每根手指按一个图标 我想禁用此多点触控功能在我的应
  • 如何将一个组件服务响应传递给角度2中的其他组件

    我是角度 4 的新手 在一个组件中从服务器获取响应 并且我希望在其他组件中获取此响应对象如何访问 应用程序组件 ts export class AppComponent selected skipCount number 0 errorMe
  • 如何在3.0模拟器上正确运行应用程序?

    我从 SDK 3 1 和 OpenGL ES 模板创建了一个新项目 如您所知 这个新模板具有 ES 1 1 和 ES 2 0 实现 我想先处理 ES 1 1 部分 所以我将项目设置中的 Base SDK 更改为 Simulator 3 0
  • 创建一个在 R 中重复自身的向量

    我想创建一个重复自身的向量 例如 1 3 直至 12 行 1 2 3 1 2 3 1 2 3 1 2 3 我怎样才能在 R 中做到这一点 感谢您的帮助 See rep 你想要的很简单 gt rep 1 3 times 4 1 1 2 3 1
  • 多对多索引创建约定

    我的问题与这个帖子 https stackoverflow com questions 48645872 prevent index created by convention on many to many table 但我不想阻止 而是
  • HTML5 Canvas 改变所有线条的颜色[重复]

    这个问题在这里已经有答案了 我用 HTML5 画布制作了一个简单的绘图应用程序 您单击两个不同的位置以从一个点到另一个点绘制一条线 我还有两个文本输入框 您可以在其中更改线条粗细和颜色 问题是 当我改变线条的颜色时 它会改变all之前画的线
  • 为 SQL Server 表自动生成 INSERT 语句的最佳方法是什么?

    我们正在编写一个新的应用程序 在测试时 我们将需要一堆虚拟数据 我通过使用 MS Access 将 excel 文件转储到相关表中来添加该数据 我们经常需要 刷新 相关表 这意味着将它们全部删除 重新创建它们 然后运行保存的 MS Acce
  • 可以在 Scala 中隐藏方法吗?

    昨晚 在某个不愉快的时刻 我们庆祝了第五次因以下行为而追踪到错误的实例 String split 例如在 output split n map processRow 问题是如果output是空的 split会给你一行空字符串 process
  • 带有 base64 字符串的 HTML 图像标签(数据 URI)

    我大约每 50 200 毫秒从一系列 httprequests 获取 jpeg 图像的二进制数据 我将此数据转换为 base64 字符串 并使用 javascript 将字符串插入到 img 标记中 var img document get
  • HTML5可以访问手机上的NFC芯片吗

    我对 HTML5 不太熟悉 所以有人知道 HTML5 是否能够访问移动设备内置的 NFC 芯片吗 或者 有人可以建议另一种方法来使用其他方法来做到这一点吗 我的目标是制作一个跨平台 HTML5 Web 应用程序 可以在配备 NFC 的手机上
  • Julia JIT 编译、@time 和分配数量

    我刚刚开始评估 Julia 版本 0 6 0 并且测试了如何调整大小 和尺寸提示 可能会影响性能 我使用 time宏 文档说 运行一次进行 JIT 编译 但如果我们检查分配数量 运行一次似乎还不够 module Test function
  • 子集约束在 UML 类图中意味着什么

    有subset在部门类和人员类之间 但我不知道比是什么意思 家庭作业机会 查看由子集约束链接的两个关系 每个部门有多名成员 每个部门设经理一名 子集表示这两者之间的约束 如果后一个关系的元素是第一个关系的子集 那么你会如何描述其含义 EDI
  • 无法在反应挂钩中单击按钮时绑定单选按钮和复选框数据

    我有一个表单 当我提交数据时 它将发送到服务器并在表格中显示数据 在表中我有编辑按钮 当单击编辑按钮时 数据应该绑定到表单 在这里 我无法绑定输入字段 但不能绑定单选按钮和复选框 const Form gt const data setda
  • 如何在烧瓶应用程序中初始化时加载文件

    我有一个大文件 我们称之为 machine learning model hdf5 每次点击发布请求端点时 我都会将其加载到我的应用程序中 伪代码如下所示 def post self model load model machine lea
  • Cloud Explorer - 无法访问开发 Blob 容器

    我正在使用 VS2015 在本地使用 Azure 存储进行开发 我创建并访问了我的开发存储 blob 容器 效果很好 我上传了三张图像 并有代码来计算图像的大小 由于某些未知原因 我无法再在 Cloud Explorer 中展开 Blob
  • UWP:是否可以创建自己的网络文件(类似于 Onedrive)?

    我正在查看文档确定 Microsoft OneDrive 文件的可用性 https learn microsoft com en us windows uwp files quickstart determining availabilit
  • React Hooks 错误:只能在函数组件体内调用 Hooks

    我在使用时收到此错误useState钩 我有它的基本形式 看看反应文档 https reactjs org docs hooks reference html usestate供参考 但我仍然收到此错误 我已经准备好迎接掌脸时刻了 expo
  • 防止 Access 在切换到设计模式时弄乱它无法理解的查询

    在做了很长时间的其他事情后回到 Access 有一件事确实让我烦恼 那就是如果您无意中在设计模式下打开一个查询 设计器无法表示 sql 即使它是有效的 设计师将为您 更正 您的查询 并且无法撤消 有没有解决这个问题的方法 或者我至少可以让它
  • 如何区分SQLAlchemy IntegrityError的原因?

    SQLAlchemy 似乎只是抛出一个一般IntegrityError当事务存在数据完整性问题时 当然 确切的查询和错误消息包含在异常中 这足以供人调试程序 然而 在为异常编写错误处理代码时 据我所知 似乎没有一个好的方法来检查哪个表上的哪
  • 为什么 ComboBox 是下拉结果整个应用程序性能非常慢?

    我有一个wpf应用程序 有一个奇怪的事情 只要我按下鼠标 ComboBox下拉箭头就会变得所有UI响应都很慢 无论ComboBox是否有项目 烦人的情况只出现在某些计算机上 期待答复 我查看了您可以在互联网上找到的提示 我发现没有任何问题