将ObservableCollection解释为StackPanel元素的WPF样式



我有一个数据数组(存储为ObservableCollection),我正在动态实例化它,并将它链接到StackPanel中的ItemsControl。数据的格式如下:

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

并且我的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>

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

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

名称

值值值。。。

名称

值值值。。。

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

  1. 如何授予Style对此数组的访问权限?(或者:在我拥有数组后,我如何修改样式?)

  2. 如何动态实例化Style中的新元素(例如,对于每个数组元素)?

我真的很感激你的帮助。如果我试图以这种方式构建任何东西完全错误,请纠正我。我是WPF的新手。

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

简单的风格开始:

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

相关内容

  • 没有找到相关文章

最新更新