我有一个有4个Stackpanel子网格。我想通过单击第一个堆栈面板使其他3个堆栈面板可见,并通过单击它们折叠它们。我在Stackpanel中使用Tap事件,但它不在stackpanels的空白部分处理。
如何在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>
答案 0 :(得分: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行网格作为列表形式,对吧?
一个好的做法是首先将“组”视觉元素放在基础网格中。不要担心使用太多,如果你看到渲染页面的可视树,你会看到可能有数百或数千个网格,没有太多的性能损失。