Degrafa:GraphicBorderSkin 无法作为画布背景通过:borderSkin:ClassReference
Degrafa 新手:-)。
我能够获得“com.degrafa.skins.CSSSkin”来创建线性渐变背景。现在,当我尝试找出径向渐变时,我正在研究更高级的东西......
我通过观看 Flex-skinning-with-degrafa-screencast 但我的代码对我不起作用,我的画布上出现白色背景。
这是我到目前为止的代码:
我有一个 MXML 组件 ThreeWayGrad.mxml,它扩展了 Canvas 并有一个 ThreeWayGradient 的 styleName:
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas
xmlns:mx="http://www.adobe.com/2006/mxml"
styleName="ThreeWayGradient"/>
我有一个 ThreeWayGradient 的 CSS 样式条目,带有 RadialGradient 类的皮肤标签:
Canvas.ThreeWayGradient
{
borderSkin: ClassReference("assets.skins.RadialGradient");
}
最后这里是 RadialGradient .mxml 组件:
<?xml version="1.0" encoding="utf-8"?>
<GraphicBorderSkin
xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns="http://www.degrafa.com/2007">
<mx:Script>
<![CDATA[
[Bindable] private var _height:Number = 0;
[Bindable] private var _width:Number = 0;
override protected
function updateDisplayList(w:Number, h:Number):void
{
super.updateDisplayList(w, h);
_height = h;
_width = w;
trace("INFO: displaylist updated --" + _height + " : " + _width );
}
]]>
</mx:Script>
<strokes>
<SolidStroke id="mainStroke" color="#333333" weight="3"/>
</strokes>
<fills>
<RadialGradientFill
id="blueGradient"
angle="45"
focalPointRatio="0">
<GradientStop
alpha="1"
ratio=".25"
color="#ffffff"/>
<GradientStop
alpha="1"
ratio=".70"
color="#003355"/>
<GradientStop
alpha="1"
ratio="1"
color="#111111"/>
</RadialGradientFill>
</fills>
<!-- Creating the background -->
<geometry>
<GeometryComposition>
<!-- Creating a Rectangle to draw the gradient to and
moving the center of the gradient to the lower left corner -->
<RegularRectangle
fill="{blueGradient}"
stroke="{mainStroke}"
height="{_height}"
width="{_width}"
/>
</GeometryComposition>
</geometry>
</GraphicBorderSkin>
有谁知道为什么这不起作用?我看到跟踪输出的大小正确,所以我知道该类正在被调用。
我还使用 Surface(而不是 GraphicBorderSkin 元素)和 GeometryGroup(而不是 GeometryComposition)将此代码复制到新的应用程序中,并且它有效。无论如何,我确定我错过了一些简单的东西,提前谢谢!
Degrafa newbie here :-).
I was able to get "com.degrafa.skins.CSSSkin" to create linear gradient backgrounds. Now I'm getting into more advanced stuff as I try to figure out radial gradients...
I figured this out by watching Flex-skinning-with-degrafa-screencast but my code isn't working for me and I'm getting a white background on my canvas.
Here is the code I have so far:
I have a MXML component ThreeWayGrad.mxml which extends Canvas and has a styleName for ThreeWayGradient:
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas
xmlns:mx="http://www.adobe.com/2006/mxml"
styleName="ThreeWayGradient"/>
I have a CSS style entry for ThreeWayGradient with a skin tag for the class RadialGradient:
Canvas.ThreeWayGradient
{
borderSkin: ClassReference("assets.skins.RadialGradient");
}
And finally here is the RadialGradient.mxml component:
<?xml version="1.0" encoding="utf-8"?>
<GraphicBorderSkin
xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns="http://www.degrafa.com/2007">
<mx:Script>
<![CDATA[
[Bindable] private var _height:Number = 0;
[Bindable] private var _width:Number = 0;
override protected
function updateDisplayList(w:Number, h:Number):void
{
super.updateDisplayList(w, h);
_height = h;
_width = w;
trace("INFO: displaylist updated --" + _height + " : " + _width );
}
]]>
</mx:Script>
<strokes>
<SolidStroke id="mainStroke" color="#333333" weight="3"/>
</strokes>
<fills>
<RadialGradientFill
id="blueGradient"
angle="45"
focalPointRatio="0">
<GradientStop
alpha="1"
ratio=".25"
color="#ffffff"/>
<GradientStop
alpha="1"
ratio=".70"
color="#003355"/>
<GradientStop
alpha="1"
ratio="1"
color="#111111"/>
</RadialGradientFill>
</fills>
<!-- Creating the background -->
<geometry>
<GeometryComposition>
<!-- Creating a Rectangle to draw the gradient to and
moving the center of the gradient to the lower left corner -->
<RegularRectangle
fill="{blueGradient}"
stroke="{mainStroke}"
height="{_height}"
width="{_width}"
/>
</GeometryComposition>
</geometry>
</GraphicBorderSkin>
Does anyone know why this isn't working? I see the trace output with the correct sizes, so I know the class is getting called.
I also copied this code into a new Application using a Surface instead of GraphicBorderSkin element and GeometryGroup instead of GeometryComposition, and it works. Anyway I'm sure I'm missing something simple and thanks in advance!!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您应该能够使用这样的皮肤代码(skinWidth和skinHeight在GraphicBorderSkin内部公开,因此您不需要覆盖updateDisplayList并为宽度和高度指定其他局部变量):
在这种情况下,您不需要GeometryComposition包含正则矩形。我还与 Jason Hawryluk(Degrafa 架构师)讨论了这个问题,他指出了通过 Geometry 的布局支持指定的替代方法 - 请参阅注释标记“Alternative”以了解布局驱动的示例。
对于画布,您需要指定其绘制的宽度和高度设置:
You should be able to use skin code like this (skinWidth and skinHeight are exposed inside the GraphicBorderSkin so you don't need to override updateDisplayList and specify additional local variables for width and height):
In this case, you don't need a GeometryComposition enclosing the RegularRectangle. I also discussed this with Jason Hawryluk (Degrafa architect) and he pointed out the alternative way to specify via Geometry's layout support - see the commented markup "Alternative" for the layout driven example.
And for the Canvas, you need to specify a width and height setting for it to draw: