2013-01-15 86 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?