2

我有一个动态实例化的数据数组(存储为ObservableCollection),并且我将它链接ItemsControlStackPanel. 数据格式如下:

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

并且 my ObservableCollection<VariableValueList<double>> IVCollection,在构造之后,ItemsControl与以下内容相关联:

主窗口.xaml.cs

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

IndependentVariables起源于这里:

主窗口.xaml

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

我需要构建 StyleIVCell来访问每个VariableValueList<double>(一旦我得到它,获得它的NameValues成员将是微不足道的)。

我需要对数据进行格式化,以便对每个元素进行打印NameValues如下所示:

姓名

价值价值价值...

姓名

价值价值价值...

...

利用现有的StackPanel. 我知道这个问题至少有两个潜在的问题。

  1. 如何让 Style 访问这个数组?(或:拥有数组后如何修改样式?)

  2. 我如何在 Style 中即时实例化新元素(例如,对于每个数组元素)?

我真的很感谢你的帮助。如果我试图以这种方式构建任何完全错误的东西,请纠正我。我对 WPF 相当陌生。

4

1 回答 1

4

您不需要额外的StackPanel,因为ItemsControl将为项目创建它自己的面板。Style 不需要访问数组,ItemsControl自动为所有项目创建和管理容器。您只需要提供DataTemplate这两种类型的物品。您可以使用另一个ItemsControl内部DataTemplateforVariableValueList<double>来显示Values属性中包含的项目。要获得水平布局,请为此设置自ItemsPanelTemplate定义ItemsControl

简单的风格开始:

<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 回答