Разделение событий уровня WPF - PullRequest
2 голосов
/ 05 января 2011

У меня есть самый высокий слой под названием " canvas ", который используется для отображения изображения. Затем я пытаюсь использовать событие menuCanvas_touchDown для нижнего слоя с именем " menuCanvas ", которое отображает мое меню рабочей области. Однако, когда я прикасаюсь к картинке, она заходит в menuCanvas_touchDown. Его нужно найти в слое menuCanvas.

<Canvas x:Name="menuCanvas"  
     TouchDown="menuCanvas_TouchDown" TouchUp="menuCanvas_TouchUp" 
    TouchMove="menuCanvas_TouchMove" TouchLeave="menuCanvas_TouchLeave" 
    TouchEnter="menuCanvas_TouchEnter"                 
    VerticalAlignment="Stretch" HorizontalAlignment="Stretch"  
    Background="Transparent"
    IsManipulationEnabled="True">


    <Canvas x:Name="drawCanvas"  
     TouchDown="drawCanvas_TouchDown" TouchUp="drawCanvas_TouchUp" 
    TouchMove="drawCanvas_TouchMove" TouchLeave="drawCanvas_TouchLeave" 
    TouchEnter="drawCanvas_TouchEnter"                 
    VerticalAlignment="Stretch" HorizontalAlignment="Stretch"  
    Background="Transparent"
    IsManipulationEnabled="True">
            <Canvas x:Name="canvas"></Canvas>
            </Canvas>
    </Canvas>

alt text

Я хочу коснуться изображения, и с событием menuCanvas_touchDown ничего не происходит. Как мне решить эту проблему? Я пытаюсь использовать e.handle, но это нарушает манипуляции с картинкой.

Спасибо

Edit:

Имеется код drawCanvas_TouchDown и drawCanvas_TouchUp.

private void drawCanvas_TouchDown(object sender, TouchEventArgs e)
    {
        if (state == (int)STATE.Pen)
        {
            if (_activeStrokes.TryGetValue(e.TouchDevice.Id, out stroke))
            {
                FinishStroke(stroke);
                return;
            }

            // Create new stroke, add point and assign a color to it.
            Stroke newStroke = new Stroke();
            newStroke.Color = _touchColor.GetColor();
            newStroke.Id = e.TouchDevice.Id;

            // Add new stroke to the collection of strokes in drawing.
            _activeStrokes[newStroke.Id] = newStroke;
        }

    }private void drawCanvas_TouchUp(object sender, TouchEventArgs e)
    {
        // Find the stroke in the collection of the strokes in drawing.
        if (state == (int)STATE.Pen)
        {
            if (_activeStrokes.TryGetValue(e.TouchDevice.Id, out stroke))
            {
                FinishStroke(stroke);
            }
        }
    }

1 Ответ

2 голосов
/ 05 января 2011

Вы пытались использовать e.OriginalSource?Вы можете проверить источник события.

if(e.OriginalSource == menuCanvas)
{
    //Your code
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...