【问题标题】:Disable UI Automation for Silverlight controls (combobox, etc.)禁用 Silverlight 控件(组合框等)的 UI 自动化
【发布时间】:2016-01-21 23:13:35
【问题描述】:

由于 here 记录的 UI 自动化框架,我在 Silverlight 中遇到了内存泄漏问题

我们实现自定义控件库(继承基本 Silverlight 控件并扩展其功能的控件)。例如

<local:BaseControl x:Name="DropDownControl" x:Class="xxx.xxx.Views.DropDown"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local ="clr-namespace:xxx.CustomControls.Views"  
mc:Ignorable="d"

d:DesignHeight="23" d:DesignWidth="120" Background="#FF1F3B53">
<Border x:Name="bdrMain" BorderThickness="1" BorderBrush="Transparent">
    <Grid x:Name="LayoutRoot">
        <ComboBox x:Name="ddlMainControl" Canvas.ZIndex="1"/>
    </Grid>
</Border>

我可以通过覆盖类本身的 OnCreateAutomationPeer 方法来禁用自定义控件本身的自动化。

protected override System.Windows.Automation.Peers.AutomationPeer OnCreateAutomationPeer()
{
   return null;
}

但是,组合框本身仍必须响应自动化提供程序对其自动化对等方的请求,因为我仍然可以看到它在 WinDBG 中泄漏。在这种情况下如何禁用组合框的自动化有什么想法吗?

附: - 我知道您通过设置无窗口参数 = true 禁用自动化应用程序范围,但它是一个成熟的应用程序,我不希望更改任何可能增加风险的应用程序范围

【问题讨论】:

    标签: c# wpf silverlight memory-leaks combobox


    【解决方案1】:

    默认面板是VirtualisingStackPanel,这可能是您的问题的原因。

    【讨论】:

    • 对不起,我不明白你的意思?哪里的默认面板?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    相关资源
    最近更新 更多