Как я могу использовать событие Tap в пустой части StackPanel в WinRT?

У меня есть сетка с 4 дочерними элементами Stackpanel. Я хочу сделать видимыми другие 3 панели стека, щелкнув первую панель стека, и свернуть их, щелкнув их. Я использую событие Tap в Stackpanel, но оно не обрабатывается в пустых частях стековых панелей.

Как я могу сделать это для полной части StackPanel?

Моя панель стека

<StackPanel Orientation="Horizontal"> 
<TextBlock Foreground="Gray" FontSize="12" FontFamily="Arial Black" x:Uid="LastDateofEntry" Margin="0,0,3,0" FontWeight="SemiBold" />
<TextBlock Foreground="Gray" FontSize="12" FontFamily="Arial Black" Text="{Binding LastVisitDateTime}"/> 
</StackPanel>

person Tugrul Emre Atalay    schedule 02.07.2013    source источник
comment


Ответы (1)


Возможно, вы обнаружили ошибку в фреймворках пользовательского интерфейса Microsoft, из-за чего, если нет визуального элемента, к которому нужно прикоснуться/щелкнуть, то никакие взаимодействия не обнаруживаются.

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

В вашем случае у вас, похоже, есть визуальные элементы, но элемент, вероятно, не растягивается на всю ширину контейнера.

Возможно, вы захотите добавить цветной фон, чтобы увидеть, где заканчивается элемент, а затем поэкспериментировать с шириной или разместить StackPanels в их собственных (полной ширины) сетках, возможно, также потребуется прямоугольник фона или цвет фона с 0,1 альфа, возможно.

Короче говоря: ваши элементы, вероятно, не достигают полной ширины, поэтому нечего нажимать. Остерегайтесь элементов, которые логически находятся на экране, но были оптимизированы и недоступны для использования, нужны хитрости, чтобы заставить их вернуться.

Обновлять

Вот некоторый демонстрационный код для вашей ситуации:

    <Grid Grid.Row="1">
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition />
        </Grid.RowDefinitions>

        <Grid Grid.Row="0" Background="DarkBlue">
            <StackPanel Orientation="Horizontal">
                <TextBlock>Mace</TextBlock>
                <TextBlock>Pepper</TextBlock>
            </StackPanel>
        </Grid>
        <Grid Grid.Row="1" Background="DarkGreen">
            <StackPanel Orientation="Horizontal">
                <TextBlock>Basil</TextBlock>
                <TextBlock>Oregano</TextBlock>
            </StackPanel>
        </Grid>
    </Grid>

Здесь сетка представляет каждый элемент в «списке». Вы используете 4-строчную сетку как форму списка, верно?

Хорошей практикой является размещение «групп» визуальных элементов внутри базовой сетки. Не беспокойтесь о том, чтобы использовать слишком много, если вы когда-нибудь увидите визуальное дерево отображаемой страницы, вы увидите, что могут быть сотни или тысячи сеток без особого снижения производительности.

person Luke Puplett    schedule 02.07.2013
comment
Вы правы, я тоже так думал, но как мне сделать дизайн динамичным? Например, моя первая Stackpanel имеет вид ‹StackPanel Orientation=Horizontal› ‹TextBlock Foreground=Gray FontSize=12 FontFamily=Arial Black x:Uid=LastDateofEntry Margin=0,0,3,0 FontWeight=SemiBold /› ‹TextBlock Foreground=Gray FontSize =12 FontFamily=Arial Black Text={Binding LastVisitDateTime}/› ‹/StackPanel› Мой текстовый блок связывается с кодом позади. - person Tugrul Emre Atalay; 02.07.2013
comment
Таким образом, вы делаете дизайн цветным во время работы с ним, просто чтобы вы могли видеть границы и где все на самом деле, а затем удаляете / меняете цвета, когда работает проверка на попадание. - person Luke Puplett; 02.07.2013
comment
Я не понимаю вопроса в комментарии. - person Luke Puplett; 02.07.2013
comment
Я написал свою панель стека, как я могу добавить этот элемент в нее? - person Tugrul Emre Atalay; 02.07.2013
comment
Сначала я бы поместил каждую панель StackPanel внутрь сетки. Сетка растянется на всю ширину и станет целью касания, «корневым» визуальным элементом для каждого элемента в списке. Возможно, вам придется придать сетке крошечный альфа-фоновый цвет (попробуйте без предварительного). - person Luke Puplett; 02.07.2013
comment
Я пробую их, скоро буду - person Tugrul Emre Atalay; 02.07.2013
comment
Но родителем моей панели стека является сетка, поэтому она должна работать и в моей сетке, не так ли? - person Tugrul Emre Atalay; 02.07.2013