переместить оконное приложение без хрома на перетаскивание в Flex 4

Я реализовал оконное приложение без хрома в flex 4. Но при этом я заметил, что все максимизация, минимизация и даже возможность перетаскивания окна исчезли. Мне нужна возможность перетаскивать окно. Я много гуглил и ничего не смог придумать. Может ли кто-нибудь указать мне правильное направление.

Заранее спасибо.


person Nishant    schedule 01.09.2011    source источник


Ответы (1)


Вам нужно будет создать собственный скин для вашего WindowedApplication. Если вы посмотрите в код WindowedApplication, вы найдете это:

[SkinPart (required="false")]
public var titleBar:TitleBar;

это означает, что вы можете добавить заголовок в скин, но вам не обязательно это делать. Фактически WindowedApplicationSkin не имеет заголовка.

Включение TitleBar в пользовательский скин автоматически даст вам нужное поведение перетаскивания. TitleBarSkin по умолчанию поставляется с обычными кнопками окна (свернуть, развернуть, закрыть), так что вы можете создать и здесь собственный скин. Один без кнопок, если они вам не нужны.

Вот урезанный пример.

Пользовательский скин для WindowedApplication (только белый фон и заголовок):

<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" >

    <fx:Metadata>[HostComponent("Object")]</fx:Metadata>

    <s:states>
        <s:State name="normal" />
        <s:State name="disabled" />
        <s:State name="normalAndInactive" />
        <s:State name="disabledAndInactive" />
    </s:states>

    <s:Rect id="backgroundRect" left="0" right="0" top="0" bottom="0" >
        <s:fill>
            <s:SolidColor id="backgroundFill" color="0xffffff" />
        </s:fill>
    </s:Rect>

    <s:TitleBar left="0" right="0" top="0" height="24" 
                skinClass="skin.TitleBarSkin" />

    <s:Group id="contentGroup" left="0" right="0" top="25" bottom="0" />

</s:Skin>

Пользовательский скин для вашего TitleBar (просто градиентный фон и кнопка закрытия):

<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        minHeight="24" >

    <fx:Metadata>
      [HostComponent("spark.components.windowClasses.TitleBar")]
    </fx:Metadata> 

    <s:states>
        <s:State name="normal" />
        <s:State name="disabled" />
        <s:State name="normalAndMaximized" />
        <s:State name="disabledAndMaximized" />
    </s:states>

    <s:Rect id="background" left="0" right="0" top="0" bottom="0">
        <s:fill>
            <s:LinearGradient rotation="90">
                <s:GradientEntry color="0xFFFFFF" />
                <s:GradientEntry color="0xBABABA" />
            </s:LinearGradient>
        </s:fill>
    </s:Rect>

    <s:Button id="closeButton" label="close" right="0" verticalCenter="0" />

</s:Skin>

По-видимому, требуется «closeButton», поэтому вам придется включить его в скин. Но если вы все же хотите от него избавиться, просто установите для его свойств «visible» и «includeInLayout» значение «false».

person RIAstar    schedule 01.09.2011
comment
ОМГ, это идеально. Большое спасибо. - person Nishant; 02.09.2011