2013-01-15 30 views
2

好吧,所以我不熟悉强大的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 
     }); 
    } 
+0

你能清楚地描述什么是不工作的,例如是ScrollViewer拒绝滚动?它根本不显示这些项目吗? –

+2

'Stackpanel'控件混乱了滚动条。我建议开始检查MVVM模式,以及如何在WPF中应用绑定和数据模板,而不是尝试在代码ala WinForms中创建和分配子控件。 –

+0

@FabianTamp项目加载,他们都在那里(我可以看到他们,如果我调整整个表单),但滚动条灰色,不会让我滚动。底部没有箭头......这使我认为这是某种财产,但我没有找到可行的东西 – iMortalitySX

回答

1

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

所以回答我的问题,鉴于上述情况,以及this link我发现我的设置网格,其中包含了滚动等这样的有趣的尺寸使它工作作为标榜。问题很明显,Grid向scrollview报告它是不确定的大,所以scrollviewer也可以。所以...对于我上面的代码,我需要处理整个窗体的大小,并相应地设置我的网格的高度。

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

</Grid> 

How can I get ScrollViewer to work inside a StackPanel?