这是我的问题:我有一个包装类,其中包含每组包含15个图像的列表集。我想将一个核心StackPanel
绑定到一个方法,该方法实际上 修改 传递给它的同一StackPanel
并添加子StackPanel
每个包含15个图像的元素。
澄清:
我有一个垂直方向的中心StackPanel
。 此StackPanel
位于DataTemplate
! 内。
<DataTemplate>
<Grid x:Name="ImageDisplayGrid" Height="861" Width="656">
<StackPanel x:Name="CentralImagePanel" HorizontalAlignment="Left" Height="841" Margin="10,10,0,0" VerticalAlignment="Top" Width="636"/>
</Grid>
</DataTemplate>
WritableBitmap
个对象。StackPanel
绑定到一些修改StackPanel
的方法,迭代我的包装类列表并将子StackPanel
控件添加到中心StackPanel
找到我的包装类的每个实例。StackPanel
的新StackPanel
将使用该包装类中包含的图像进行填充实例StackPanel
)传递给某个方法,让方法修改它,然后在中心StackPanel
填充其子项“StackPanels”后继续。进一步澄清:
想想NetFlix。您知道如何在每个类别中垂直滚动,每个类别允许您水平滚动吗?这就是我想要模仿的东西,只是我希望它是动态的并绑定到包含要使用的图像列表的包装类。
我现在的主要障碍是中央StackPanel
位于DataTemplate
内,因此在运行时无法轻松访问它。最重要的是,无论如何使用绑定会更好。
我尝试使用IValueConverter
将我的包装器类转换为中心StackPanel
可以使用的StackPanel
个对象列表,但这不起作用。我还搜索了将控件绑定到没有返回属性而没有任何运气的方法的方法。
非常感谢任何帮助或示例。
答案 0 :(得分:1)
你在考虑这个错误。真的,真的,错的。 StackPanel
是布局控件。您不应该永远直接修改其子项或任何其他属性。
正如您所注意到的,没有真正的方法以您描述的方式完成此任务。
要显示集合,请使用ItemsControl
。在你的情况下,它会是这样的:
<ItemsControl ItemsSource="{Binding Categories}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ItemsControl ItemsSource={"Binding Videos"}>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<!-- Whatever -->
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
请注意,内部模板是另一个 ItemsControl
,这次使用水平StackPanel
作为面板模板。