Estoy creando un nuevo componente Flex (Flex 3). Me gustaría que tenga un estilo predeterminado. ¿Existe una convención de nomenclatura o algo para que mi archivo .cs lo convierta en el estilo predeterminado? ¿Me estoy perdiendo de algo?¿Cómo se define un estilo predeterminado para un componente Flex personalizado?
Respuesta
De dos maneras, en general. Al hacer referencia directamente al nombre de la clase, por ejemplo, si creó una nueva clase de componente MyComponent
en ActionScript, o indirectamente al hacer que un componente MXML amplíe otro UIComponent llamado MyComponent
, en ambos casos, el componente seleccionaría el estilos declaradas en la hoja de estilos externa, siempre y cuando hoja de estilo ha sido importado en su aplicación (por ejemplo, a través de Style source
):
MyComponent
{
backgroundColor: #FFFFFF;
}
Otra forma es mediante el establecimiento de la propiedad del UIComponent styleName
(como una cadena):
public class MyComponent
{
// ...
this.styleName = "myStyle";
// ...
}
... a nd definir el estilo en el archivo CSS como tal (nota de la notación de puntos):
.myStyle
{
backgroundColor: #FFFFFF;
}
sentido?
Además de lo que sugirió Christian Nunciato, otra opción es definir un inicializador estático para los estilos de su componente Flex. Esto le permite configurar los estilos predeterminados sin requerir que el desarrollador incluya un archivo CSS.
Un refinamiento de lo joshtynjala sugerido:
public class CustomComponent extends UIComponent {
private static var classConstructed:Boolean = classConstruct();
private static function classConstruct():Boolean {
if (!StyleManager.getStyleDeclaration("CustomComponent")) {
var cssStyle:CSSStyleDeclaration = new CSSStyleDeclaration();
cssStyle.defaultFactory = function():void {
this.fontFamily = "Tahoma";
this.backgroundColor = 0xFF0000;
this.backgroundAlpha = 0.2;
}
StyleManager.setStyleDeclaration("CustomComponent", cssStyle, true);
}
return true;
}
}
He leído esto en la documentación en alguna parte; el método classContruct se llama automáticamente.
... y aquí está el enlace http://livedocs.adobe.com/flex/3/html/help.html?content=skinstyle_3.html –
Es bastante obvio por qué se llama a classConstruct y es desafortunado que los documentos no sean más detallados sobre este tema. Se llama a get porque la variable estática classConstructed se establece llamando al método estático classConstruct. Cualquier variable estática o bloque de código se ejecutará cuando se haga referencia por primera vez al tipo, antes de que se haya producido una instanciación. No he intentado esto, pero estoy bastante seguro de que el solo uso de un bloque estático producirá el mismo resultado, sin declarar variables redundantes y menos desorden. –
Tenga en cuenta que se debe usar el nombre completo del paquete, que significa: "com.mipackage.CustomComponent". El ejemplo de Darren funciona si CustomComponent está en el paquete predeterminado. De lo contrario, use el nombre completo del paquete. –
Christian tiene derecho a aplicar el CSS, pero si planea utilizar el componente en una biblioteca en todos los proyectos, querrá escribir un archivo css predeterminado para esa biblioteca. He aquí cómo se hace:
- Crear un archivo css llamado "defaults.css" (Sólo este nombre de archivo va a funcionar!) Y lo puso en el nivel superior en la carpeta "src" de su biblioteca. Si el archivo css hace referencia a cualquier activo, también debe estar bajo "src".
- (¡IMPORTANTE!) Vaya a Propiedades del proyecto de la biblioteca> Ruta de compilación de biblioteca Flex> Activos e incluya el archivo css y todos los recursos.
Así es como el equipo de Adobe configura todos sus estilos predeterminados, ahora usted también puede hacerlo. Simplemente lo descubrí: enorme
Más bien debería dar crédito en lo que corresponde: Henk y Chris en las respuestas aquí: http://parallaxed.net/article/css-type-selectors-are-not-supported-in-components? comentado = 1 – Yarin
Para crear un estilo predeterminado, también puede tener una propiedad en su clase y anular la función styleChanged() en UIComponent, por ejemplo, para dibujar un color de fondo en la mitad del ancho del componente:
// this metadata helps flex builder to give you auto complete when writing
// css for your CustomComponent
[Style(name="customBackgroundColor", type="uint", format="color", inherit="no")]
public class CustomComponent extends UIComponent {
private static const DEFAULT_CUSTOM_COLOR:uint = 0x00FF00;
private var customBackgroundColor:uint = DEFAULT_CUSTOM_COLOR;
override public function styleChanged(styleProp:String):void
{
super.styleChanged(styleProp);
var allStyles:Boolean = (!styleProp || styleProp == "styleName");
if(allStyles || styleProp == "customBackgroundColor")
{
if(getStyle("customBackgroundColor") is uint);
{
customBackgroundColor = getStyle("customBackgroundColor");
}
else
{
customBackgroundColor = DEFAULT_CUSTOM_COLOR;
}
invalidateDisplayList();
}
// carry on setting any other properties you might like
// check out UIComponent.styleChanged() for more examples
}
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
graphics.clear();
graphics.beginFill(customBackgroundColor);
graphics.drawRect(0,0,unscaledWidth/2,unscaledHeight);
}
}
también podría crear un regulador para la customBackgroundColor que llama invalidateDisplayList(), por lo que también puede establecer la propiedad customBackgroundColor mediante programación, así como a través de CSS.
Es posible que desee sobrescribir los estilos predeterminados utilizando la etiqueta <fx:Style>
o similar. Si ese es el caso, una CSSStyleDeclaration ya puede existir en el momento en que se compruebe classConstructed.Aquí hay una solución:
private static var classConstructed:Boolean = getClassConstructed();
private static function getClassConstructed():Boolean {
var defaultCSSStyles:Object = {
backgroundColorGood: 0x87E224,
backgroundColorBad: 0xFF4B4B,
backgroundColorInactive: 0xCCCCCC,
borderColorGood: 0x333333,
borderColorBad: 0x333333,
borderColorInactive: 0x666666,
borderWeightGood: 2,
borderWeightBad: 2,
borderWeightInactive: 2
};
var cssStyleDeclaration:CSSStyleDeclaration = FlexGlobals.topLevelApplication.styleManager.getStyleDeclaration ("StatusIndicator");
if (!cssStyleDeclaration) {
cssStyleDeclaration = new CSSStyleDeclaration ("StatusIndicator", FlexGlobals.topLevelApplication.styleManager, true);
}
for (var i:String in defaultCSSStyles) {
if (cssStyleDeclaration.getStyle (i) == undefined) {
cssStyleDeclaration.setStyle (i, defaultCSSStyles [i]);
}
}
return (true);
}
- 1. Configuración de un aspecto predeterminado para un componente personalizado en Flex 4
- 2. Flex: determine si un componente muestra
- 3. Cargando un componente Yii personalizado
- 4. Cómo crear un Componente Swing personalizado
- 5. ¿Cómo se especifica un validador para un componente de entrada dentro de un componente compuesto?
- 6. ¿Cómo puedo definir "contentGroups" personalizados en un componente personalizado de Flex 4?
- 7. ¿Cómo poner nodos secundarios MXML dentro de un componente Flex 4 personalizado?
- 8. heredar el estilo del estilo predeterminado
- 9. Eventos del componente Adobe Flex
- 10. Android - Escribir un componente personalizado (compuesto)
- 11. El componente personalizado JSF no se encuentra
- 12. Postgres: ¿define un valor predeterminado para las fallas de CAST?
- 13. Cómo hacer referencia a un estilo en un tema personalizado
- 14. estilo personalizado para TabWidget
- 15. Flex 4: Valor de CSS personalizado
- 16. Aplicar estilo WPF predeterminado
- 17. Estilo personalizado para Bootstrap seleccione
- 18. Flex: Cómo agregar un botón de cerrar pestaña para el componente TabNavigator
- 19. Creación de estilo predeterminado con atributos personalizados
- 20. ¿Cómo se establece un valor predeterminado para un WTForms SelectField?
- 21. ¿Cómo se define un pedido en Scala?
- 22. ¿Cómo se usa #define?
- 23. ¿Cómo se define un tipo para una función en Scala?
- 24. Cómo se elimina el borde de un Componente TextArea de Flex 4 (halo con tema de chispa)
- 25. Proporcionar un estilo predeterminado (atributos) en una vista personalizada
- 26. Listdivider de estilo personalizado
- 27. Estilo ContextMenu predeterminado - WPF
- 28. Cómo # #define un NSString para uso global?
- 29. Reparando el diseño de Gmail con un estilo personalizado
- 30. ¿Cómo se define un párrafo en un NSAttributedString?
perdí mucho tiempo conseguir todo esto funcione, por lo que para cualquier persona que busca asistencia adicional: Esta es una gran respuesta, esto funciona, pero para una buena referencia adicional, visita nuestra responde abajo por Yarin. Cuando sigas la respuesta de Yarin, asegúrate de que el nombre del archivo CSS se llame realmente "defaults.css". Ningún otro nombre funcionará aunque puedas incluir cualquier archivo css en el proyecto. Argh. – davidemm
@davidemm: Buen punto, aclaré mi respuesta – Yarin