1
<Grid>
                <ScrollViewer Height="391" HorizontalAlignment="Left" Margin="10,10,0,0" Name="scrollViewer1" VerticalAlignment="Top" Width="427" >
                    <Grid Height="733">

                    </Grid>
                </ScrollViewer>
                <TextBox Height="76" HorizontalAlignment="Left" Margin="19,453,0,0" Name="textBox1" Text="TextBox" VerticalAlignment="Top" Width="254" />
                <Button Content="Button" Height="77" HorizontalAlignment="Left" Margin="290,450,0,0" Name="button1" VerticalAlignment="Top" Width="136" />
            </Grid>

当用户单击按钮时,我想在滚动查看器中添加一个复选框。每次点击时,一个新的复选框也应该出现在前一个复选框的下方。而且,ScrollViewer 是完成这项任务的理想控件吗?

4

3 回答 3

3

如果您希望复选框出现在彼此下方,您应该使用 StackPanel 而不是 Grid 作为 SrollViewer 内的容器:

   <ScrollViewer Height="391" HorizontalAlignment="Left" Margin="10,10,0,0" Name="scrollViewer1" VerticalAlignment="Top" Width="427" > 
                <StackPanel Name="CheckBoxContainer">

                </StackPanel> 
   </ScrollViewer> 

在您的点击事件中,您添加复选框

 CheckBoxContainer.Children.Add(new CheckBox());
于 2012-08-15T11:04:51.730 回答
2

您需要将复选框添加到包含在 ScrollViewer 中的网格中。这可以使用类似于以下的代码来完成:

myGrid.Children.Add(new CheckBox());

假设“myGrid”是您的网格的名称。

当您有一个有限的区域需要包含通常不适合该区域的内容时,ScrollViewer 是一个很好的控件。因为我不知道你的应用程序做什么,它看起来像什么,或者它是如何工作的,所以从设计的角度很难说它是否是正确的控制。

但是,鉴于用户可能会添加 10 个(甚至 100 个)复选框,那么您可能希望这不会超出您希望的范围来扩展表单。

于 2012-08-15T10:46:39.510 回答
1

对于继续添加复选框,请使用 StackPanel 而不是 Grid

<Grid>
    <ScrollViewer Height="391" HorizontalAlignment="Left" Margin="10,10,0,0" Name="scrollViewer1" VerticalAlignment="Top" Width="427" >
        <StackPanel x:Name="stackPanel">

        </StackPanel>
    </ScrollViewer>
    <TextBox Height="76" HorizontalAlignment="Left" 
             Margin="19,453,0,0" Name="textBox1" Text="TextBox" VerticalAlignment="Top" Width="254" />
    <Button Content="Button" Height="77" HorizontalAlignment="Left" 
            Margin="290,450,0,0" Name="button1" Click="button1_Click" VerticalAlignment="Top" Width="136" />
</Grid>

然后:

private void button1_Click(object sender, RoutedEventArgs e)
{
    stackPanel.Children.Add(new CheckBox() { Content = "Hi"});
}
于 2012-08-15T11:06:33.223 回答