繁体   English   中英

如何在wpf中的ItemsPanelTemplate中找到控件?

[英]how to find a control inside ItemsPanelTemplate in wpf?

我试图通过ItemsSource绑定ItemsControl时访问DataTemplate内部的网格。

这是完整的XMAL代码,如何从外部查找某个元素?

for (int i = 0; i < allViewControl.Items.Count; i++)
{
 var container =  allViewControl.ItemContainerGenerator.ContainerFromItem(allViewControl.Items[i]) as FrameworkElement;
 var grid = allViewControl.ItemTemplate.FindName("grid", container) as DataGrid;
}

我发现这总是返回null?

<ScrollViewer Grid.Row="0" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
    <ItemsControl  x:Name="allViewControl" Focusable="False" HorizontalContentAlignment="Center"
     Grid.IsSharedSizeScope="true" ItemsSource="{Binding AllClassCharacters}" 
     ItemTemplate="{StaticResource CharacterViewModelTemplate}"  >
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <Extensions:AnimatedWrapPanel  IsItemsHost="true" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl>
</ScrollViewer>



 <DataTemplate x:Key="CharacterViewModelTemplate" DataType="{x:Type ViewModel:CharacterViewModel}">
            <Grid x:Name="grid" Width="200" Height="Auto" MinHeight="115" Margin="1" MinWidth="130" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" RenderTransformOrigin="0.5,0.5" Background="#66000000"     >
                <Grid.RowDefinitions>
                    <RowDefinition Height="70"/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
            <ProgressBar x:Name="playerProgressBar" VerticalAlignment="Top" Background="Transparent" Height="5" Width="Auto" Value="0" Visibility="Collapsed" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan ="2" Grid.RowSpan="2" Foreground="White" BorderThickness="0" Style="{DynamicResource ProgressBarStyle1}" />
</Grid>

简短的答案是您不需要这样做-使用MVVM应该为您要实现的目标提供更简单的解决方案。

如果您在某些小众情况下(例如设置焦点)需要使用它,则搜索“ find control wpf”-存在一些现有问题( 示例 ),可以破解并从WPF UI树中获取控件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM