2013-08-26 5 views
2

У меня есть настраиваемый элемент управления под названием customContextMenu.qml, который имеет изображение и метку в каждой строке. Я хочу обработать щелчок/прикосновение к этому изображению и метку вместе. Как мне это сделать?Как обрабатывать события касания пользовательского элемента управления в blackberry10

В настоящее время я добавляю onTouch() в каждый контейнер, содержащий изображение и ярлык, но он не работает. Я использую это управление customContextMenu в моем main.qml.

Container { 

    id: testPageCustomMBoxContainer 
    objectName: "testPageCustomMBoxContainer" 

    background:dropdownBack.imagePaint 
    attachedObjects: [ 
    ImagePaintDefinition { 
     id: dropdownBack 
     repeatPattern: RepeatPattern.Fill 
     imageSource: "asset:///images/dropdown_bg.png" 
    } 
    ] 

layout: StackLayout { 
    orientation: LayoutOrientation.TopToBottom 
} 

maxWidth: 200.0 
maxHeight: 180.0 
horizontalAlignment: HorizontalAlignment.Right 
verticalAlignment: VerticalAlignment.Top 

Container { 

    id: testPageCustomMBoxRetestContainer 
    objectName: "testPageCustomMBoxRetestContainer" 

    preferredWidth:200.0 
    preferredHeight:90.0 
    layout: StackLayout { 
    orientation: LayoutOrientation.LeftToRight 
    } 

    leftPadding: 10.0 
    topPadding: 10.0 
    bottomPadding: 10.0 
    rightPadding: 20.0 
    ImageView { 
    imageSource: "asset:///images/retest.png" 
    scalingMethod: ScalingMethod.AspectFit 
    verticalAlignment: VerticalAlignment.Center 
    layoutProperties: StackLayoutProperties { 
     spaceQuota: 1.0 
    } 
    } 

    Label { 
    text: "Retest" 
    horizontalAlignment: HorizontalAlignment.Right 
    verticalAlignment: VerticalAlignment.Center 
    textFormat: TextFormat.Plain 

    layoutProperties: StackLayoutProperties { 
     spaceQuota: 3.0 
    } 
    } 

    onTouch: {  
    var retestPage = retestPage.createObject(); 
    testNavigationPane.push(retestPage); 
    } 
    attachedObjects: [ 
    ComponentDefinition { 
     id:retestPage 
     source: "main.qml" 
    } 
    ] 
} 
Container { 

    id: testPageCustomMBoxHelpContainer 
    objectName: "testPageCustomMBoxHelpContainer" 

    preferredWidth: 200.0 
    preferredHeight: 90.0 
    layout: StackLayout { 
    orientation: LayoutOrientation.LeftToRight 
    } 

    leftPadding: 10.0 
    topPadding: 5.0 
    bottomPadding: 15.0 
    rightPadding: 20.0 
    ImageView { 
    imageSource: "asset:///images/help.png" 
    scalingMethod: ScalingMethod.AspectFit 

    verticalAlignment: VerticalAlignment.Center 

    layoutProperties: StackLayoutProperties { 
     spaceQuota: 1.0 
    } 
    } 

    Label { 
    text: "Help" 
    horizontalAlignment: HorizontalAlignment.Right 
    verticalAlignment: VerticalAlignment.Center 
    textFormat: TextFormat.Plain 
    layoutProperties: StackLayoutProperties { 
     spaceQuota: 3.0 
    } 

    onTouch: { 
     var helpPage = helpPage.createObject(); 
     testNavigationPane.push(helpPage); 
    } 
    attachedObjects: [ 
     ComponentDefinition { 
     id: helpPage 
     source: "helpPage.qml" 
     Page { 
      paneProperties: NavigationPaneProperties { 
      backButton: ActionItem { 
       onTriggered: { 
       testNavigationPane.pop(); 
       } 
      } 
      } 
     } 
     } 
    ] 
    } 
} 
+0

Так что же не работает? –

+0

touch не работал ... но его работа сейчас ... но почему-то количество страниц создается и открывается, тогда как я привязал только одну страницу к ontouch(). Может ли кто-нибудь дать мне решение, почему это число страниц открываются? – sumitl

ответ

2

Вам необходимо использовать обработчики жестов для таких вещей, как Touched или LongPressed. Событие onTouch будет использоваться только в том случае, если вы пытаетесь сделать что-то, пока пользователь держит палец вниз или что-то подобное. Вот пример кода, показывающий различия между ними:

//Touched event - only fires if user touches and lets go of element. 
//This is the preferred method 
gestureHandlers: [ 
    TapHandler { 
     onTapped: { 
      //Code goes here 
     } 
    } 
] 

//Display active image if touched 
//This would be used for something such as changing a background color of a button when pressed. 
onTouch: { 
    if (event.touchType == TouchType.Down) { 
     //Do something on down touch - e.g. change background color 
    } else if (event.touchType == TouchType.Up || event.touchType == TouchType.Cancel)  { 
     //Users finger has been lifted OR has left the element. 
    } 
} 
+0

okay ... !! Благодаря..! Я попробовал это с жестомHandler, и он работал, как ожидалось! но я до сих пор не могу понять, почему он открыл количество страниц с помощью onTouch()? – sumitl

+0

onTouch() постоянно срабатывает при касании элемента. Поэтому, если вы используете это событие, а затем прикоснитесь к кнопке, он запустит событие несколько раз до появления первой страницы (что затем предотвратит дальнейшие события касания). – hyarion

+0

Ok..thanks Hyarion ... !! :) – sumitl

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

  • Нет связанных вопросов^_^