我有一个水平ScrollViewer,它包含一个StackPanel,最初是空的。 UserControls按钮单击创建,并添加到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本身就是一个更大的网格。现在我希望将Polygon添加到此ScrollViewer中,但我无法直接将其添加为子项,因为“内容只能设置一次”。如果我在代码隐藏中将它添加到StackPanel(在设置Canvas left,top和ZIndex之后),则将UserControl添加到下面 Polygon。我希望他们不管是不是,要么就是。这甚至可能吗?现在,我的Polygon与ScrollViewer共享相同的Grid Row和Column。这是我的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#中这样做,因为我想根据屏幕大小更改点数。
答案 0 :(得分:1)
在StackPanel和Polygon之间放置另一个容器控件。中间网格将允许您按正常方式按行和列控制它们的位置。中间StackPanel将使Container堆栈和Polygon堆栈与Container堆栈中的项目分开:
<ScrollViewer>
<Grid>
<StackPanel x:Name="Container" HorizontalAlignment="Left" VerticalAlignment="Top" Width="Auto">
<!--User controls added here dynamically-->
</StackPanel>
<Polygon />
</Grid>
</ScrollViewer>