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

2024-05-05

好吧,我不太熟悉强大的 WPF,但我尝试了一个有趣的项目来跳入其中。我制作了一个简单的 RSS/ATOM 提要查看器,它从 RRS 或 ATOM 提要中提取 HTML,并将其粘贴到浏览器控件中,该控件添加到堆栈面板中...这是 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
        });
    }

好吧,不幸的是,我正在回答我自己的问题,而没有发疯并重写一堆东西。因此,根据我的研究,事实证明,在 .NET 4.0 和 4.5 中,StackPanel 与 ScrollView 配合得很好...只要您知道自己在做什么!我同意留下的评论,即 MVVM 是在后台发生的事情,我的代码实际上反映了我必须将其更改为尝试让它工作的内容,即使我有适当的模型、视图、侦听器/处理程序等(其中全部内置于框架中)。

鉴于上述情况,我的问题的答案是这个链接 https://stackoverflow.com/questions/802821/how-can-i-get-scrollviewer-to-work-inside-a-stackpanel我发现设置网格的大小(其中包含滚动视图和其他类似的乐趣)使其可以像广告中那样工作。问题显然是网格向滚动视图报告它太大了,所以滚动查看器也可能太大。所以......对于上面的代码,我需要处理整个表单大小的调整并相应地设置网格的高度。

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

</Grid>

如何让 ScrollViewer 在 StackPanel 中工作? https://stackoverflow.com/questions/802821/how-can-i-get-scrollviewer-to-work-inside-a-stackpanel

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以编程方式将内容添加到滚动查看器,滚动条停止工作 的相关文章

随机推荐