2014-01-31 4 views
0

Попытайтесь, как я могу, я не могу обрезать искровую кнопку, когда я помещаю кнопку в искровом dataGrid. Я вынужден использовать тему гало.Flex DataGrid с кнопкой с кожей

Я создал кнопку рендеринга кнопок в отдельном файле mxml; У меня есть отдельные кнопки за пределами dataGrid, которые показывают кожу правильно, поэтому я уверен, что нет ничего плохого в коже. Все дело в том, чтобы использовать ту же самую оболочку внутри dataGrid, что и снаружи

Следующий код показывает то же поведение, что и я; в этом случае рендеринг создается в строке. Кажется, что skinClass не соблюдается. Или есть другой способ сделать это.

<s:DataGrid id="dg" width="500" dataProvider="{employees2}"> 
    <s:columns> 
     <s:ArrayList> 
      <s:GridColumn dataField="name" headerText="Name"> 
       <s:itemRenderer> 
        <fx:Component> 
         <s:GridItemRenderer> 
          <s:Button label="Press Me" 
             top="0" bottom="0" left="0" right="0" 
             skinClass="MyButtonSkin" /> 
         </s:GridItemRenderer> 
        </fx:Component> 
       </s:itemRenderer> 
      </GridColumn> 
     </s:ArrayList> 
    </s:columns> 
</s:DataGrid> 

В файл MyButtonSkin.mxml

<?xml version="1.0" encoding="utf-8"?> 
<s:SparkButtonSkin xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     xmlns:fb="http://ns.adobe.com/flashbuilder/2009" 
     minWidth="21" minHeight="21" 
     alpha.disabled="0.5"> 

<fx:Metadata> 
    <![CDATA[ 
    /** 
    * @copy spark.skins.spark.ApplicationSkin#hostComponent 
    */ 
    [HostComponent("spark.components.Button")] 
    ]]> 
</fx:Metadata> 

<fx:Script fb:purpose="styling"> 
    <![CDATA[   
     /* Define the skin elements that should not be colorized. 
     For button, the graphics are colorized but the label is not. */ 
     static private const exclusions:Array = ["labelDisplay"]; 

     /** 
     * @private 
     */  
     override public function get colorizeExclusions():Array {return exclusions;} 

     /** 
     * @private 
     */ 
     override protected function initializationComplete():void 
     { 
      useChromeColor = true; 
      super.initializationComplete(); 
     } 

    ]]>   
</fx:Script> 

<!-- states --> 
<s:states> 
    <s:State name="up" /> 
    <s:State name="over" /> 
    <s:State name="down" /> 
    <s:State name="disabled" /> 
</s:states> 

<!-- layer 2: fill --> 
<!--- @private --> 
<s:Rect id="fill" left="1" right="1" top="1" bottom="1" radiusX="10"> 
    <s:fill> 
     <s:LinearGradient rotation="90"> 
      <s:GradientEntry color="0xFAFAFA" 
          color.over="0xBBBDBD" 
          color.down="0xAAAAAA" 
          alpha="0.85" /> 
      <s:GradientEntry color="0x808080" 
          color.over="0x9FA0A1" 
          color.down="0x929496" 
          alpha="0.85" /> 
     </s:LinearGradient> 
    </s:fill> 
</s:Rect> 

<!-- layer 8: text --> 
<!--- @copy spark.components.supportClasses.ButtonBase#labelDisplay --> 
<s:Label id="labelDisplay" 
     textAlign="center" 
     maxDisplayedLines="1" 
     horizontalCenter="0" verticalCenter="1" verticalAlign="middle"> 
</s:Label> 

</s:SparkButtonSkin> 
+0

Что конкретно не так? размер/положение? –

+0

'когда я помещаю кнопку в искровом dataGrid. Я вынужден использовать тему гало «Это неправда. Вероятно, вы должны использовать [GridItemRenderer] (https://flex.apache.org/asdoc/spark/components/gridClasses/GridItemRenderer.html). – RIAstar

+0

Спасибо за ваши ответы. Это небольшая часть большого проекта, который был создан с использованием mx и темы halo; вот где возникает ограничение. Медленно я смогу перейти от mx: halo к искру: искра, но пока они должны сосуществовать. И itemRenderer был опечаткой, которую я сейчас исправил. – FlexDash

ответ

0

Оказывается, что масштабирование кнопки с размером элемента сетки не размером углового радиуса.

Я закончил с кнопкой 200x200 пикселей с радиусом угла 6 пикселей; его просто не видно. Я поднял значение до 25, и теперь я вижу его

Смежные вопросы