代码之家  ›  专栏  ›  技术社区  ›  Freakishly

如何在ScrollViewer内的StackPanel上叠加多边形?

  •  0
  • Freakishly  · 技术社区  · 10 年前

    我有一个水平ScrollViewer,它包含一个StackPanel,最初是空的。用户控件是通过单击按钮创建的,并添加到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本身位于更大的网格中。现在我想将一个多边形添加到此ScrollViewer中,但我不能直接将其作为子对象添加,因为“内容只能设置一次”。如果我在代码隐藏中将其添加到StackPanel(在设置Canvas left、top和ZIndex之后),则会添加UserControls 在下面 多边形。我希望他们在下面或上面,两者都可以。这是可能的吗?现在,我的多边形与ScrollViewer共享相同的网格行和列。这是我的多边形:

    <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#中添加,因为我想根据屏幕的大小更改点。

    1 回复  |  直到 10 年前
        1
  •  1
  •   Rob Caplan - MSFT    10 年前

    在StackPanel和多边形之间放置另一个容器控件。中间网格将允许您按行和列正常控制它们的位置。中间StackPanel将使容器堆栈和多边形堆栈与容器堆栈中的项目分开:

    <ScrollViewer>
        <Grid>
            <StackPanel x:Name="Container" HorizontalAlignment="Left" VerticalAlignment="Top" Width="Auto">
                <!--User controls added here dynamically-->
            </StackPanel>
            <Polygon />
        </Grid>
    </ScrollViewer>