用于添加动态元素的 WPF 滚动查看器

WPF scrollviewer for adding dynamic elements

我的 WPF 应用程序需要帮助。在我的 window 底部,我有一个 canvas,它动态填充了组框,其中包含几个用户元素,如按钮和网格视图。 插入的内容在我的 window 之外,我想使用滚动条访问它,但滚动条没有调整,所以我无法访问这些元素。

如何使用滚动条到达内容?

感谢您的帮助。

<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Visible"  >
    <Grid Height="Auto">
        <GroupBox Header="Fleet Import" HorizontalAlignment="Left" Height="115" Margin="23,21,0,0" VerticalAlignment="Top" Width="419">
            <StackPanel Margin="0,0,-67,0">
                <StackPanel Orientation="Horizontal">
                    <Button x:Name="btnSelectProject" Content="Select Project" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="88" Height="23" Click="btnSelectProject_Click"/>
                    <TextBox Name="tbPath" Height="17" Width="283" Margin="10,10,0,0" />
                </StackPanel>

                <Button x:Name="bntConnectTia" Content="Connect to TIA" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="88" Height="23" Click="bntConnectTia_Click"/>
            </StackPanel>
        </GroupBox>
        <GroupBox Header="Start update" HorizontalAlignment="Left" Height="115" Margin="498,21,0,0" VerticalAlignment="Top" Width="277">
            <StackPanel Orientation="Horizontal">
                <StackPanel>
                    <RadioButton Content="Maintanace"  HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="88" Height="23"/>
                    <RadioButton Content="Production"  HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="88" Height="23"/>
                </StackPanel>
                <StackPanel>
                    <Button Content="Start Update" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="88" Height="23" Click="Button_Click_2"/>
                    <Button Content="Cancel"  HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="88" Height="23"/>
                </StackPanel>
            </StackPanel>
        </GroupBox>
        <GroupBox Header="GroupBox" HorizontalAlignment="Left" Height="164" Margin="23,157,0,0" VerticalAlignment="Top" Width="752">
            <TextBox HorizontalAlignment="Left" Height="128" TextWrapping="Wrap" Name="tbOutput" VerticalAlignment="Top" Width="742" Margin="0,0,-2,0"/>

        </GroupBox>
        <Canvas x:Name="canvasDevices" Margin="23,346,25,10" Height="Auto" />
        <GroupBox Header="GroupBox" HorizontalAlignment="Left" Height="164" Margin="-393,337,0,-439" VerticalAlignment="Top" Width="752" Visibility="Hidden">
            <StackPanel>
                <StackPanel Orientation="Horizontal">
                    <Button Content="Button" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="75"/>
                    <TextBox HorizontalAlignment="Left" Height="23" Margin="10,10,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/>
                    <Button Content="Button" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="75"/>
                </StackPanel>
                <DataGrid Margin="20,10,20,0" RenderTransformOrigin="0.163,0.543" Height="88"/>
            </StackPanel>

        </GroupBox>
        <Button Content="Button" HorizontalAlignment="Left" Margin="89,151,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_3"/>
    </Grid>
</ScrollViewer>

GroupBox groupbox = new GroupBox();
        groupbox.Header = deviceName;
        groupbox.Name = deviceName;
        groupbox.Width = 742;
        groupbox.Height = 250;

stackPanelV.Children.Add(stackPanelH);
            stackPanelV.Children.Add(dgDevice);
            groupbox.Content = stackPanelV;
            Canvas.SetTop(groupbox,0);
            canvasDevices.Children.Add(groupbox);

您的项目超出 canvas 范围,canvas 未调整大小且未应用 ScrollView。

顺便说一句,我不建议您为此目的使用 canvas。 还有许多其他布局可以为您提供更好的结果,例如 StackPanel 或 WrapPanel,如果您为 WrapPanel 指定宽度,它会很好地重新排列您的项目。