Ho avuto molti problemi con WPF AutomationPeer
troppo.
Potrebbe essere possibile risolvere il problema forzando gli elementi dell'interfaccia utente WPF a utilizzare un AutomationPeer personalizzato che si comporta in modo diverso rispetto a quello predefinito non restituendo AutomationPeers dei controlli figlio. Questo potrebbe fermare qualsiasi roba di lavoro di automazione interfaccia utente, ma si spera che nel tuo caso, come nel mio, non si utilizza l'automazione interfaccia utente ..
creare una classe peer di automazione personalizzata che eredita da FrameworkElementAutomationPeer
e l'override del metodo GetChildrenCore
, per restituire un elenco vuoto invece dei peer di automazione controllo figlio. Questo dovrebbe fermare i problemi che si verificano quando qualcosa tenta di scorrere l'albero di AutomationPeers.
Ignorare anche GetAutomationControlTypeCore
per specificare il tipo di controllo su cui verrà utilizzato il peer di automazione. In questo esempio sto passando lo AutomationControlType
come parametro costruttore. Se applichi il tuo peer di automazione personalizzato a Windows, dovrebbe risolvere i tuoi problemi poiché penso che l'elemento radice sia usato per restituire tutti i bambini.
public class MockAutomationPeer : FrameworkElementAutomationPeer
{
AutomationControlType _controlType;
public MockAutomationPeer(FrameworkElement owner, AutomationControlType controlType)
: base(owner)
{
_controlType = controlType;
}
protected override string GetNameCore()
{
return "MockAutomationPeer";
}
protected override AutomationControlType GetAutomationControlTypeCore()
{
return _controlType;
}
protected override List<AutomationPeer> GetChildrenCore()
{
return new List<AutomationPeer>();
}
}
Per utilizzare il peer di automazione personalizzato l'override del metodo OnCreateAutomationPeer
nel vostro elemento dell'interfaccia utente per esempio Finestra:
protected override System.Windows.Automation.Peers.AutomationPeer OnCreateAutomationPeer()
{
return new MockAutomationPeer(this, AutomationControlType.Window);
}
fonte
2016-03-27 21:20:34
Potrebbe mostrare dove nel codice si ottiene un'eccezione generata? – Terrance