如何在 ScrollViewer 内的 StackPanel 上分层多边形?
How can I layer a Polygon over a StackPanel, which is inside a ScrollViewer?
我有一个包含单个 StackPanel 的水平 ScrollViewer,它最初是空的。用户控件在单击按钮时创建,并添加到 StackPanel。代码看起来像这样:
<ScrollViewer Grid.Column="1" Grid.Row="0" RequestedTheme="Dark" ScrollViewer.HorizontalScrollMode="Auto" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollMode="Disabled" ScrollViewer.VerticalScrollBarVisibility="Hidden">
<StackPanel x:Name="Container" HorizontalAlignment="Left" VerticalAlignment="Top" Width="Auto">
<!--User controls added here dynamically-->
</StackPanel>
</ScrollViewer>
如您所见,ScrollViewer 本身位于更大的 Grid 中。现在我想将一个多边形添加到此 ScrollViewer,但我无法将其直接添加为子项,因为 "Content can only be set once"。如果我将它添加到代码隐藏中的 StackPanel(在设置 Canvas left、top 和 ZIndex 之后),UserControls 将被添加到 below Polygon。我希望他们低于或超过,两者都可以。这可能吗?现在,我的多边形与滚动查看器共享相同的网格行和列。这是我的多边形:
<Polygon x:Name="Gripper" Grid.Column="1" Grid.Row="0" Points="0,0 0,730 -30,750 -30,800 30,800 30,750 0,730 0,100" Stroke="#DEDEDE" StrokeThickness="1" Opacity="1.0" ManipulationMode="TranslateX" ManipulationDelta="Gripper_ManipulationDelta">
<Polygon.Fill>
<SolidColorBrush Color="#FFFFFF" Opacity="0.9"/>
</Polygon.Fill>
<Polygon.RenderTransform>
<CompositeTransform />
</Polygon.RenderTransform>
</Polygon>
我可以在 XAML 或 C# 中添加它,但我想我更愿意在 C# 中添加它,因为我想根据屏幕大小更改点。
在 StackPanel 和 Polygon 之间放置另一个容器控件。中间网格将让您像往常一样按行和列控制它们的位置。中间 StackPanel 将使容器堆栈和多边形堆栈与容器堆栈中的项目分开:
<ScrollViewer>
<Grid>
<StackPanel x:Name="Container" HorizontalAlignment="Left" VerticalAlignment="Top" Width="Auto">
<!--User controls added here dynamically-->
</StackPanel>
<Polygon />
</Grid>
</ScrollViewer>
我有一个包含单个 StackPanel 的水平 ScrollViewer,它最初是空的。用户控件在单击按钮时创建,并添加到 StackPanel。代码看起来像这样:
<ScrollViewer Grid.Column="1" Grid.Row="0" RequestedTheme="Dark" ScrollViewer.HorizontalScrollMode="Auto" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollMode="Disabled" ScrollViewer.VerticalScrollBarVisibility="Hidden">
<StackPanel x:Name="Container" HorizontalAlignment="Left" VerticalAlignment="Top" Width="Auto">
<!--User controls added here dynamically-->
</StackPanel>
</ScrollViewer>
如您所见,ScrollViewer 本身位于更大的 Grid 中。现在我想将一个多边形添加到此 ScrollViewer,但我无法将其直接添加为子项,因为 "Content can only be set once"。如果我将它添加到代码隐藏中的 StackPanel(在设置 Canvas left、top 和 ZIndex 之后),UserControls 将被添加到 below Polygon。我希望他们低于或超过,两者都可以。这可能吗?现在,我的多边形与滚动查看器共享相同的网格行和列。这是我的多边形:
<Polygon x:Name="Gripper" Grid.Column="1" Grid.Row="0" Points="0,0 0,730 -30,750 -30,800 30,800 30,750 0,730 0,100" Stroke="#DEDEDE" StrokeThickness="1" Opacity="1.0" ManipulationMode="TranslateX" ManipulationDelta="Gripper_ManipulationDelta">
<Polygon.Fill>
<SolidColorBrush Color="#FFFFFF" Opacity="0.9"/>
</Polygon.Fill>
<Polygon.RenderTransform>
<CompositeTransform />
</Polygon.RenderTransform>
</Polygon>
我可以在 XAML 或 C# 中添加它,但我想我更愿意在 C# 中添加它,因为我想根据屏幕大小更改点。
在 StackPanel 和 Polygon 之间放置另一个容器控件。中间网格将让您像往常一样按行和列控制它们的位置。中间 StackPanel 将使容器堆栈和多边形堆栈与容器堆栈中的项目分开:
<ScrollViewer>
<Grid>
<StackPanel x:Name="Container" HorizontalAlignment="Left" VerticalAlignment="Top" Width="Auto">
<!--User controls added here dynamically-->
</StackPanel>
<Polygon />
</Grid>
</ScrollViewer>