以编程方式向滚动查看器添加内容,滚动条停止工作

时间:2013-01-15 21:15:14

标签: c# wpf scrollviewer

好吧,所以我并不精通强大的WPF,但我尝试了一个有趣的项目来加入它。我已经制作了一个简单的RSS / ATOM提要查看器,它将HTML和RRS或ATOM提取器拉出来并将其粘贴到一个浏览器控件中,该控件被添加到堆栈面板中......这是ScrollViewer的内容。呼。无论如何问题是,我在后面的代码中做了这一切,并发现ScrollViewer不起作用,或者没有识别内容的大小,所以没有滚动。我已经尝试设置查看器和内容的大小,以及尝试最小和最大尺寸。

我在这里缺少什么?内容就在那里,如果我在加载WPF之前加载它就可以了,但是一旦我尝试更改或“清除”控件中的子项,滚动查看器就会停止正常工作。

<Window x:Class="Heine.Syndication.xkcd.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Feed Viewer" Height="600" Width="800">
<StackPanel>
    <ToolBarPanel >
        <ToolBar>
            <ComboBox Margin="0" Width="100" Name="cbController">
                <MenuItem Header="xkcd" Name="xkcdMI"/>
                <MenuItem Header="9Gag" Name="nineGagMI"/>
                <MenuItem Header="reddit" Name="redditMI"/>
            </ComboBox>
        </ToolBar>
    </ToolBarPanel>
    <Grid Name="svMain">

    </Grid>
</StackPanel>
</Window>

    public MainWindow()
    {
        InitializeComponent();

        cbController.SelectedIndex = 0;

        xkcdMI.Click += xkcdMI_Click;
        nineGagMI.Click += nineGagMI_Click;
        redditMI.Click += redditMI_Click;

        Load("http://xkcd.com/atom.xml");
    }

    private void Load(string feedUrl)
    {
        var reader = XmlReader.Create(feedUrl);
        var feed = SyndicationFeed.Load<SyndicationFeed>(reader);
        svMain.Children.Clear();

        var tmpStack = new StackPanel();


        foreach (var item in feed.Items)
        {
            var browser = new WebBrowser();

            GetHTML(ref browser, item);

            tmpStack.Children.Add(browser);
        }

        svMain.Children.Add(new ScrollViewer()
        {
            Content = tmpStack,
            Height = svMain.Height
        });
    }

1 个答案:

答案 0 :(得分:1)

好吧,所以我很遗憾地回答了我自己的问题,没有发疯并重写了一堆东西。所以在我的研究中,事实证明在.NET 4.0和4.5中,StackPanel非常适合ScrollView ...只要你知道你在做什么!我同意MVVM背景中发生的事情,我的代码实际上反映了我必须改变它以尝试让它工作,即使我有适当的模型,视图,监听器/处理程序等(其中)都嵌入到框架中。)

所以我的问题的答案,如上所述,this link我发现设置我的网格的大小,其中包含scrollview和其他这样的乐趣使它的工作与广告一样。问题显然是网格向滚动视图报告它是不可思议的大,所以滚动查看器也可以。所以......对于我上面的代码,我需要处理整个表单的大小,并相应地设置网格的高度。

<Grid Name="svMain" Height="550">

</Grid>

How can I get ScrollViewer to work inside a StackPanel?