0

我有一个有 4 个 Stackpanel 孩子的网格。我想通过单击第一个堆栈面板使其他 3 个堆栈面板可见,并通过单击它们使它们折叠起来。我在 Stackpanel 中使用 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>
4

1 回答 1

1

您可能在 Microsoft 的 UI 框架中发现了一个陷阱,即如果没有可触摸/单击的视觉元素,则不会检测到交互。

在我的许多控件模板中,我在具有微小正不透明度的事物后面添加了不可见的矩形来解决这个问题。

在您的情况下,您似乎有视觉元素,但该元素可能不会拉伸容器的整个宽度。

您可能想要添加彩色背景以查看元素的结束位置,然后尝试宽度或将 StackPanel 放置在它们自己的(全宽)网格中,可能还需要一个背景矩形或设置为 0.1 alpha 的背景颜色。

简而言之:您的元素可能会停止在全宽范围内,因此没有什么可以点击的。注意那些逻辑上在屏幕上但已经被优化掉并且无法使用的元素,需要技巧来强制它们重新出现。

更新

以下是适合您情况的一些演示代码:

    <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 行网格作为列表形式,对吗?

一个好的做法是首先将视觉元素的“组”放置在基本网格内。不用担心使用太多,如果您曾经看到渲染页面的可视化树,您会看到可能有数百或数千个网格,而不会对性能造成太大影响。

于 2013-07-02T07:40:42.960 回答