/ / Flex 4.5 - Benutzerdefiniertes NativeWindow und Probleme - Flex, Actionscript-3, Air

Flex 4.5 - Benutzerdefiniertes NativeWindow und Probleme - flex, actionscript-3, air

Ich habe eine Klasse FlexNativeWindow, die sich auf NativeWindow erstreckt. Ich verwende diese Methode, um ein neues Fenster in meiner AIR-App zu erstellen. Alles funktioniert gut, aber einige Tastaturinteraktionen sind nicht verfügbar.

Beispielsweise ist der Fokus um die Texteingabe nicht sichtbar. Key Down und Up funktionieren nicht auf DropDownList. TabOrder funktioniert nicht gut!

Kannst du erklären warum? Weil ich sehr enttäuscht bin!

Code zum Erstellen des neuen Fensters

var wdetcorr:wDetailCorrespondant = new wDetailCorrespondant();
wdetcorr.monIdCorresp = correspDG.selectedItem.crIndex;

var wOptions:NativeWindowInitOptions = new NativeWindowInitOptions();
wOptions.systemChrome = NativeWindowSystemChrome.NONE;
wOptions.transparent = false;
var fnwDetailPatient:FlexNativeWindow = new FlexNativeWindow(wdetcorr, wOptions);
fnwDetailPatient.active();

Code zu meinem benutzerdefinierten NativeWindow

package fr.int.ui.windowSkin
{
import flash.display.NativeWindow;
import flash.display.NativeWindowInitOptions;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;

import mx.core.IUIComponent;
import mx.core.IVisualElement;
import mx.core.IVisualElementContainer;
import mx.core.UIComponent;
import mx.events.*;
import mx.managers.WindowedSystemManager;

[Event(name="creationComplete", type="mx.events.FlexEvent")]

public class FlexNativeWindow extends NativeWindow implements IFlexNativeWindow
{
private var _systemManager:WindowedSystemManager;

private var _content:UIComponent;

private var _window:IVisualElementContainer;

public function FlexNativeWindow(window:IVisualElementContainer, initOptions:NativeWindowInitOptions = null)
{
super(initOptions);


_window = window;

addEventListener(Event.ACTIVATE, windowActivateHandler);

}

public function addElement(control:IVisualElement):void
{
_window.addElement(control);
}

public function removeElement(control:IVisualElement):void
{
_window.removeElement(control);
}

private function windowActivateHandler(event:Event):void
{
event.preventDefault();
event.stopImmediatePropagation();
removeEventListener(Event.ACTIVATE, windowActivateHandler);

if (stage)
{
if (!_systemManager)
_systemManager = new WindowedSystemManager(IUIComponent(_window));

stage.addChild(_systemManager);

dispatchEvent(new FlexEvent(FlexEvent.CREATION_COMPLETE));

stage.addEventListener(Event.RESIZE, windowResizeHandler);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownListener);

}
}

private function keyDownListener (e:KeyboardEvent):void {

if (e.keyCode == Keyboard.ESCAPE) {
stage.nativeWindow.dispatchEvent(new Event("myEventClose", true));
stage.nativeWindow.close();
}


}

private function windowResizeHandler(event:Event):void
{
// prise en compte de la valeur mini
UIComponent(_window).height = stage.stageHeight;
UIComponent(_window).width = stage.stageWidth;


}
}
}

Antworten:

0 für die Antwort № 1

Sie sollten implementieren IFocusManagerContainer im FlexNativeWindow um die Fokusprobleme zu beheben.

So machen Sie es in Flash Builder:

  1. Drücken Sie Ctrl + Shift + T und geben Sie ein IFocusManagerContainer
  2. Öffnen Sie die entsprechende Datei
  3. Implementieren Sie alle deklarierten Methoden in Ihrer Klasse FlexNativeWindow

P.S: Dieser Ansatz kann jedoch fehlschlagen, da die Flex-Komponenten währenddessen in den Flex-Container platziert werden sollten NativeWindow ist eine native Klasse, keine Flex-SDK-Klasse. Ich schlage vor, Sie zu benutzen Window Klasse, die ein Flex-Container ist und bereits implementiert IFocusManagerContainer.