关于Flex的TitleWindow拖动,可能拖出主application容器,导致titlewindow无法关闭,只能重新加载application。这个问题Adobe在titleWindow的拖动事件里竟然没有处理,这个算是个bug吧。为什么Adobe一直没有重视!
flex 3中我在网上看到的,是下面这种方式解决的,大家可以试试。
本文参考[url]http://www.cnblogs.com/alala666888/archive/2011/05/05/2038206.htmlFlex Air[/url]
在flex里面TitleWindow的拖动范围默认是不控制的,但是我们经常需要将其约束在整个应用程序的主窗口内,我找了半天也没有找到相关属性设置,只能重写,下面是重写的代码:
public class MyTitleWindow extends TitleWindow
{
//拖动相关
private var regX:Number;
private var regY:Number;
public function MyTitleWindow()
{
super();
}
override protected function startDragging(event:MouseEvent):void
{
regX = event.stageX - x;
regY = event.stageY - y;
var sbRoot:DisplayObject = systemManager.getSandboxRoot();
sbRoot.addEventListener(
MouseEvent.MOUSE_MOVE, systemManager_mouseMoveHandler, true);
sbRoot.addEventListener(
MouseEvent.MOUSE_UP, systemManager_mouseUpHandler, true);
sbRoot.addEventListener(
SandboxMouseEvent.MOUSE_UP_SOMEWHERE, stage_mouseLeaveHandler);
// add the mouse shield so we can drag over untrusted applications.
systemManager.deployMouseShields(true);
}
protected override function stopDragging():void
{
var sbRoot:DisplayObject = systemManager.getSandboxRoot();
sbRoot.removeEventListener(
MouseEvent.MOUSE_MOVE, systemManager_mouseMoveHandler, true);
sbRoot.removeEventListener(
MouseEvent.MOUSE_UP, systemManager_mouseUpHandler, true);
sbRoot.removeEventListener(
SandboxMouseEvent.MOUSE_UP_SOMEWHERE, stage_mouseLeaveHandler);
regX = NaN;
regY = NaN;
systemManager.deployMouseShields(false);
}
private function systemManager_mouseMoveHandler(event:MouseEvent):void
{
event.stopImmediatePropagation();
if (isNaN(regX) || isNaN(regY))
{
return;
}
var x:Number = event.stageX - regX;
var y:Number = event.stageY - regY;
var maxX:Number = this.stage.nativeWindow.width - this.width;
var maxY:Number = this.stage.nativeWindow.height - this.height;
//超出范围 ,停止移动
if(x < 0) x = 0;
if(y < 0) y = 0;
if(x > maxX) x = maxX;
if(y > maxY) y = maxY;
move(x, y);
}
private function systemManager_mouseUpHandler(event:MouseEvent):void
{
// trace("systemManager_mouseUpHandler: " + event);
if (!isNaN(regX))
stopDragging();
}
private function stage_mouseLeaveHandler(event:Event):void
{
// trace("stage_mouseLeaveHandler: " + event);
if (!isNaN(regX))
stopDragging();
}
}
需要用到TitleWindow时,就用MyTitleWindow代替原来的TitleWindow。或者不用写上面那个MyTitleWindow控件,直接在自己定义的<mx:TitleWindow>里面重写这两个方法。就ok了。
flex 4的解决方法是这样的:
我们系统是Flex4,TitleWindow的这个问题我是这样解决的,在TitleWindow里加入如下代码(重写titlewindow的拖动方法,包括开始拖动和结束拖动,在拖动时添加范围限制),
override protected function moveArea_mouseDownHandler(event:MouseEvent):void
{
startDrag(false, new Rectangle(0, 0, this.parentApplication.width - this.width, this.parentApplication.height - this.height));
super.moveArea_mouseDownHandler(event);
}
override protected function moveArea_mouseUpHandler(event:Event):void
{
stopDrag();
super.moveArea_mouseUpHandler(event);
}
分享到:
相关推荐
2. **自定义最大化功能**:在Flex中,没有直接的方法来控制TitleWindow的最大化行为。我们可以手动调整TitleWindow的大小来模拟最大化效果。在接收到最大化按钮的点击事件后,获取当前窗口的原始大小,并将其设置为...
Flex特效_可拖动弹出窗口布局容器TitleWindow.zip )
在Flex开发中,TitleWindow是一种常用的组件,它用于创建具有标题栏和可选边框的弹出窗口。这篇博客文章“Flex中支持缩放的TitleWindow”可能详细讲解了如何在Flex应用程序中实现TitleWindow组件的缩放功能,这对于...
这个特定的示例是关于如何在Flex中创建一个TitleWindow,该窗口不仅具备基本的窗口操作功能,还允许用户通过拖动来调整窗口大小。 首先,我们来看`MyTitleWindow.as`这个文件。这是ActionScript 3(AS3)源代码文件...
在本文中,我们将深入探讨如何使用Adobe Flex技术创建一个具有拖拽功能的柱状图,以及如何实现点击柱状图后弹出图片窗口的功能。Flex是一个开源的、基于ActionScript的框架,主要用于构建富互联网应用程序(RIA)。...
3. 用户界面组件:Flex 3.0提供了一系列的组件,如Button、TitleWindow、Canvas等,可以轻松构建窗口结构。TitleWindow组件通常用于创建带有标题、可最小化、最大化和关闭功能的窗口,非常适合模仿Windows窗口的外观...
这种容器专门设计用于Flex应用程序的顶部,展示应用级别的控制元素,如菜单、关闭按钮等,通常以水平方向布局。 6. **DividedBox, HDividedBox 和 VDividedBox 布局** 这些布局容器允许你创建可调整大小的面板,...
TitleWindow在Adobe Flex中是一种常见的用户界面组件,它通常用于创建具有标题栏的自定义窗口。在本场景中,我们讨论的是一个特定的TitleWindow实现,它具备了最大化、最小化和关闭的功能,这对于开发者来说是非常...
TitleWindow组件是一个可以拖动的窗口,通常用作对话框或者工具窗口。它包含一个标题栏,可以通过标题栏进行拖动操作。 #### 10. ViewStack 组件 ViewStack组件允许开发者在一个容器中切换不同的视图。这通常用于...
在探讨"FLEX主要容器关系图"这一主题时,我们深入解析Flex框架中各种容器组件的层次结构与相互关联,这对于理解和应用Flex布局至关重要。Flex,作为Adobe推出的一款用于开发跨平台应用程序的开源框架,其核心优势...
一个实现最大化、最小化、缩放功能的TitleWindow,是参照其他大虾的代码,然后自己写的一个TitleWindow,并且限制了TitleWindow的拖动区域。里面提供了一个MyTitleWindow.as和一个使用MyTitleWindow的.mxml的文件...
它被用来控制Flex应用的行为和数据处理。ActionScript代码通常嵌入在MXML文件中,使用`<mx:Script>`标签包裹: ```xml <![CDATA[ private function onClick(event:MouseEvent):void { trace("Button clicked!");...
- **AdvancedDataGrid**提供更高级的功能,如拖拽、编辑等。 **21. CSS** - CSS用于定义Flex应用的样式,包括颜色、字体等。 **22. 数据验证** - Flex支持数据验证机制,确保输入数据的有效性。 **23. 打印** ...
- Flex中的 **Splitter** 组件可以帮助创建可拖动的分割线,从而实现动态调整界面布局的功能。 - 使用示例: ```xml ``` #### 7. Panel组件 - **Panel** 是一个带标题栏的容器组件,通常用于组织多个UI元素。 -...
2. **禁止TitleWindow拖动**:在创建自定义窗口时,通过PopUpManager的配置以及设置`isPopUp`属性为false,可以禁止TitleWindow被用户拖动。 3. **设置TabNavigator的标签文本样式**:通过指定`tabStyleName`属性,...
Canvas 是 Flex 中一个非常基础且重要的布局容器,它允许开发者通过精确控制子元素的位置来构建界面。Canvas 容器本身定义了一个矩形区域,可以在此区域内放置其他容器或控件。与大多数其他容器不同,Canvas 不会...
TitleWindow是Adobe Flex框架中的一个核心组件,它用于创建具有标题栏、边界和操作按钮(如最大化、最小化、还原和关闭)的可自定义窗口。在Flex4中,TitleWindow进行了重写,以提供更丰富的功能和更好的用户体验。...
10. **CSS**:用于控制Flex应用程序的外观和风格,类似于HTML中的CSS。 11. **数据验证**:通过ActionScript实现对用户输入的有效性检查。 12. **打印功能**:允许用户将Flex应用中的内容打印出来。 13. **图表绘制*...
Flex提供两种主要的窗口类型:`Application`和`TitleWindow`。`Application`是整个Flex应用的根容器,它包含了所有其他组件,并且在运行时自动创建。`TitleWindow`则是一种带有标题栏和关闭按钮的弹出窗口,通常用于...
- 在主程序中,可以通过组件浏览器找到自定义的`CLogin`组件,并将其拖拽到设计面板上使用。 - 示例代码如下: ```xml *"> <![CDATA[ import mx.controls.Alert; private function btnClick():void { ...