2

ObservableCollection動的にインスタンス化するデータの配列 ( として保存) があり、それをItemsControl内のにリンクしていますStackPanel。データは次のようにフォーマットされます。

public class VariableValueList<T>
{
    public String Name {get; private set;}
    public IList<T> Values {get; private set;}
    ...
}

myObservableCollection<VariableValueList<double>> IVCollectionは、構築後、次のようにリンクされItemsControlています。

MainWindow.xaml.cs

private void Open_OnClick(object sender, RoutedEventArgs e)
{
    ...
    IndependentVariables.ItemsSource = IVCollection;
}

ここでIndependentVariables発生します:

MainWindow.xaml

        <StackPanel>
            <ItemsControl Name="IndependentVariables" Style="{StaticResource IVCell}"></ItemsControl>
        </StackPanel>

IVCellそれぞれにアクセスできるようにStyle を作成する必要がありますVariableValueList<double>(取得したら、そのNameValuesメンバーを取得するのは簡単です)。

次のように、要素ごとにデータをフォーマットして印刷する必要がありNameますValues

名前

値 値 値 ...

名前

値 値 値 ...

...

既存のものを活用StackPanel。この問題には、少なくとも 2 つの根本的な問題があることを理解しています。

  1. スタイルにこの配列へのアクセスを与えるにはどうすればよいですか? (または: 配列を取得した後でスタイルを変更するにはどうすればよいですか?)

  2. オンザフライでスタイル内の新しい要素をインスタンス化するにはどうすればよいですか (たとえば、各配列要素に対して)?

本当にありがとうございました。このように完全に間違って何かを構築しようとしている場合は、修正してください。私はWPFにかなり慣れていません。

4

1 に答える 1

4

アイテム用の独自のパネルを作成するStackPanelため、余分な は必要ありません。ItemsControlStyle は配列へのアクセスを必要とせずItemsControl、すべての項目のコンテナーを自動的に作成および管理します。必要なのはDataTemplate、両方のタイプのアイテムを提供することだけです。プロパティに含まれる項目を表示するために、ItemsControl内部で別の for を使用できます。水平レイアウトを取得するには、そのためのカスタムを設定します。DataTemplateVariableValueList<double>ValuesItemsPanelTemplateItemsControl

開始するシンプルなスタイル:

<Style TargetType="{x:Type ItemsControl}"
       x:Key="IVCell">
    <Setter Property="ItemTemplate">
        <Setter.Value>
            <DataTemplate>
                <StackPanel>
                    <TextBlock Text="{Binding Name}" />
                    <ItemsControl ItemsSource="{Binding Values}">
                        <ItemsControl.ItemsPanel>
                            <ItemsPanelTemplate>
                                <WrapPanel />
                                <!-- or <StackPanel Orientation="Horizontal"> -->
                            </ItemsPanelTemplate>
                        </ItemsControl.ItemsPanel>
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding}" Margin="2,0" />
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>
                </StackPanel>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>
于 2013-02-05T23:28:36.437 に答える