3

わかりましたので、私は強力な WPF に精通しているわけではありませんが、それに飛び込むために興味深いプロジェクトを試みました。HTML を RRS または ATOM フィードから引き出して、スタック パネルに追加された Browser コントロールに貼り付けるシンプルな RSS/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
        });
    }
4

1 に答える 1

2

さて、残念ながら私は自分の質問に答えています。夢中になってたくさんのものを書き直すことはありません。したがって、私の調査では、.NET 4.0 および 4.5 では、StackPanel は ScrollView で優れていることがわかりました...自分が何をしているのかを知っている限り! MVVM はバックグラウンドで発生しているものであり、適切なモデル、ビュー、リスナー/ハンドラーなどがある場合でも、MVVM を実際に変更して動作させるために変更しなければならなかったものをコードに反映しているというコメントに同意します (すべてフレームワークに組み込まれています)。

したがって、上記の質問への回答と、このリンクを使用すると、スクロールビューやその他の楽しみを含むグリッドのサイズを設定すると、宣伝どおりに機能することがわかりました。問題は明らかに、グリッドがスクロールビューにそれが定義できないほど大きいことを報告していたため、スクロールビューアーもそうである可能性があることです。だから...上記のコードでは、フォーム全体のサイズが変更されたときに処理し、それに応じてグリッドの高さを設定する必要があります。

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

</Grid>

ScrollViewer を StackPanel 内で動作させるにはどうすればよいですか?

于 2013-01-15T23:12:39.603 に答える