禁用Silverlight控件(组合框等)的UI自动化



由于这里记录的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来禁用自动化应用程序范围,但这是一个成熟的应用程序,我不希望改变任何可能增加风险的应用程序范围

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

最新更新