【问题标题】:how to find a control inside ItemsPanelTemplate in wpf?如何在 wpf 中的 ItemsPanelTemplate 中找到控件?
【发布时间】:2011-05-31 11:28:27
【问题描述】:

当 ItemsControl 由 ItemsSource 绑定时,我正在尝试访问 DataTemplate 中的 Grid。

这是完整的 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>

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

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

    如果您需要它来处理一些特殊情况(例如设置焦点),请搜索“find control wpf” - 存在一些现有问题 (example) 可以破解并从 WPF UI 树中获取控件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多