好吧,我不是那么精通强大的 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 是后台发生的事情,我的代码实际上反射(reflect)了我必须将其更改为尝试使其工作的内容,即使我有适当的模型、 View 、监听器/处理程序等(其中都内置在框架中)。
所以我的问题的答案,鉴于上述,this link我发现设置我的网格的大小,其中包含 ScrollView 和其他类似的乐趣,使它像广告一样工作。问题显然是 Grid 向 scrollview 报告它非常大,因此 scrollviewer 也可能太大。所以...对于我上面的代码,我需要在整个表单调整大小时进行处理并相应地设置网格的高度。
<Grid Name="svMain" Height="550">
</Grid>
关于c# - 以编程方式向滚动查看器添加内容,滚动条停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14347066/