My View possède une collection de UserControls (définie dans ItemTemplate d'ItemsControl), et je souhaite obtenir des références à ceux-ci.Comment obtenir le contrôle de ItemTemplate dans ItemsControl?
J'utilise ItemContainerGenerator.ContainerFromIndex
, mais il retourne ContentPresenter
, alors que je devrais obtenir mon type UserControl, PlotterColetaCanalUnico
. Comment devrais-je faire ça?
Xaml:
<ItemsControl x:Name="plotter" ItemsSource="{Binding Sinais}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="1" IsItemsHost="True"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border x:Name="upper_light_border" BorderThickness="1,0,0,0" BorderBrush="#FFE5E5E5" SnapsToDevicePixels="True">
<Border x:Name="lower_dark_border" BorderThickness="0,0,0,1" BorderBrush="#FF1A1A1A" SnapsToDevicePixels="True">
<local:PlotterColetaCanalUnico/>
</Border>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
code derrière:
IEnumerable<PlotterColetaCanalUnico> SubPlotters
{
get
{
var plotters = new List<PlotterColetaCanalUnico>();
for(int i = 0; i < plotter.Items.Count; i++)
{
var container = (UIElement)plotter
.ItemContainerGenerator
.ContainerFromIndex(i);
// "container" ends up being ContentPresenter,
// so the following cast does not work!
var subPlotter = container as PlotterColetaCanalUnico;
if (subPlotter != null)
{
plotters.Add(subPlotter);
}
}
return plotters;
}
}
J'ai eu à travailler en fonction de la réponse acceptée, et les modifications suivantes:
Xaml - a ajouté un nom à UserControl:
<local:PlotterColetaCanalUnico x:Name="plotterCanal"/>
code derrière - a cherché le UserControl directement (sans avoir recours à VisualTreeHelper comme le suggère la réponse):
if (container == null)
continue;
var template = container.ContentTemplate;
var subPlotter = template.FindName("plotterCanal", container) as PlotterColetaCanalÚnico;
pensez-vous que je pourrais ajouter un 'x: nAME' au UserControl Je veux trouver, et y accéder directement sans utiliser VisualTreeHelper? – heltonbiker
Peu importe, j'ai essayé ce que j'ai suggéré et cela a fonctionné. De toute façon, ta réponse a fait l'affaire, merci !! – heltonbiker
De rien! Et désolé pour le commentaire paresseux que j'ai laissé sur votre question plus tôt. – WasGoodDone