2

私はWPFに比較的慣れていません。誰かが私に最良の方法論を教えてもらえますか?

ブロックを結ぶ線でブロック図を作成します。ボックスはすべて一列に並ぶので、長方形と線で水平に配置されたスタック パネルを考えていました。

四角形はタブ ページを埋めるためのもので、クリック可能です。

問題は、実行時まで四角形がいくつあるか分からないことです。

これを行う正しい方法は何ですか?コード ビハインドで四角形の数を見つけてそれらと行をコードに追加して配置するか、XAML でもう少し柔軟に何かを行うことができますか?

長方形の数は 2 から 10 の間になるので、それが 2 の場合、タブの幅全体を埋めたくありません。したがって、理想的には、長方形に最小幅と最大幅を設定し、中央に配置して、見栄えがよくなるようにしたいと思います。

よろしくお願いします

4

2 に答える 2

2

そのようなことを行う正しい方法は、ダイアグラム ブロックのコレクションを表すモデルの一部を使用<ItemsControl>してバインドすることです。ItemsSourceデータ バインディングは、WPF の非常に強力な部分です。残念ながら、回答で簡単に説明するには複雑すぎるため、いくつかの記事/コード サンプルを読んで理解を深めることをお勧めします。

ObservableCollection<DiagramBlock>ブロックに(または を実装するその他のコレクション)を使用する場合INotifyCollectionChanged、コードでブロックを追加または削除すると、それに応じて UI が変更されます。

于 2013-05-15T00:07:42.363 に答える
0

databindingこれは、実行時に複数のコントロール (ここ) を追加するために使用するサンプルですbutton(コード ビハインド)。良い出発点になるはずです。

また、フォームが読み込まれた後にデータが変更される場合は、INotifyPropertyChangeを実装し、それに応じて更新できます。

MainWindow.xaml:

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" >
        <ItemsControl ItemsSource="{Binding YourCollection}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>
</Window>

MainWindow.xaml.cs

    public MainWindow()
    {
        InitializeComponent();

        YourCollection = new List<Button>();


        //Dummy Data for Demo 
        YourCollection.Add(new Button() { Height = 25, Width = 25 });
        YourCollection.Add(new Button() { Height = 25, Width = 25 });

        this.DataContext = this;

    }

    public List<Button> YourCollection { get; set; }
于 2013-05-15T02:41:37.323 に答える