在 ListView 中处理 SwapChainPanel

Handle SwapChainPanel in ListView

我有我的 xaml 代码

<ListView x:Name="ListVideo"
              ItemsSource="{x:Bind ScreenList}"
              VerticalAlignment="Stretch"
              FlowDirection="LeftToRight"
              Grid.Row="1"
              ScrollViewer.VerticalScrollBarVisibility="Hidden"
              ScrollViewer.HorizontalScrollBarVisibility="Hidden">
        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <controls:UniformGrid></controls:UniformGrid>
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid Background="White"
                      BorderBrush="White"
                      BorderThickness="1">
                    <SwapChainPanel x:Name="swapChain"
                                    
                                    VerticalAlignment="Stretch"
                                    HorizontalAlignment="Stretch"/>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate></ListView>

ScreenListObservableCollection 的类型。所以问题是如何在 ListView 中添加新的 SwapChainPanel

我打算添加 SwapChainPanel 项目,并且对于每个项目我都使用 DirectX 来渲染视频,所以我想在代码隐藏中获取对象 SwapChainPanel 项目然后进行处理。

谢谢。

So the question is how can I add new SwapChainPanel in the ListView

您已将 SwapChainPanel 放置在列表视图数据模板中,当前列表视图 ItemsSource 是 ObservableCollection。所以你只需要将新项目添加到 ObservableCollection 中,列表视图将自动呈现新项目。

so i want to get the object SwapChainPanel item in code-behind

您可以使用 ContainerFromItem method, and find swapChain with name in ContentTemplateRoot 获得 itemContainer。

var container = MyList.ContainerFromItem(MyList.Items[0]) as ListViewItem;
var swapChain = (container.ContentTemplateRoot as Grid).FindName("swapChain");

更新

正如下面的 Hoka Biu 评论,您还可以在 SwapChainPanel Loaded 事件中获取 swapChain 实例。

<SwapChainPanel Loaded="swapChain_Loaded"/>

private void swapChain_Loaded(object sender, RoutedEventArgs e)
{
    var swapChain = sender as SwapChainPanel;         
}