Have ItemsControl
<Grid> <ItemsControl x:Name="control" VerticalAlignment="Center" HorizontalAlignment="Center" ItemsSource="{x:Bind ItemsSource, Mode=OneWay}" ItemTemplate="{x:Bind CellTemplate, Mode=OneWay, Converter={StaticResource SimpleSelector}}"> <!--Хочу сделать так--> <ContentControl VerticalAlignment="Stretch" HorizontalAlignment="Stretch" ContentTemplate="{Binding SelectedCollageTemplate, Converter={StaticResource CollageTemplateSelector}}" /> <!--Как было--> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <controls:SimplePanel SelectedCollage="{Binding SelectedCollage, Mode=TwoWay}" SelectedCollagePattern="{Binding SelectedCollagePattern}"> <controls:SimplePanel.Background> <ImageBrush Stretch="Fill" ImageSource="ms-appx:///Images/Background/5.jpg" /> </controls:SimplePanel.Background> </controls:SimplePanel> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> </ItemsControl> </Grid> The task is to select the desired panel depending on what the converter returns. If you just type in SimplePanel, everything works
When using a selector, do not even enter the constructor in the panel class.
Added selector:
<templateSelector:CollageTemplateSelector x:Key="CollageTemplateSelector" SimpleTemplate="{StaticResource SimpleTemplate}" ShapeTemplate="{StaticResource ShapeTemplate}"/> And I moved my panel to the corresponding DataTemplate:
<DataTemplate x:Key="SimpleTemplate"> <controls:SimplePanel SelectedCollage="{Binding SelectedCollage, Mode=TwoWay}" SelectedCollagePattern="{Binding SelectedCollagePattern}"> <controls:SimplePanel.Background> <ImageBrush Stretch="Fill" ImageSource="ms-appx:///Images/Background/5.jpg" /> </controls:SimplePanel.Background> </controls:SimplePanel> </DataTemplate> The converter returns SimplePanel as it should, but the controller itself does not start. What is the problem?
The selector itself:
public class CollageTemplateSelector : IValueConverter { public DataTemplate SimpleTemplate { get; set; } public DataTemplate ShapeTemplate { get; set; } public DataTemplate CreativeTemplate { get; set; } public object Convert(object value, Type targetType, object parameter, string language) { var result = SimpleTemplate; var collage = value as Collage; if (collage != null) { switch (collage.Type) { case CollageTemplates.Simple: result = this.SimpleTemplate; break; case CollageTemplates.Shape: result = this.ShapeTemplate; break; case CollageTemplates.Creative: result = this.CreativeTemplate; break; } } return result; } public object ConvertBack(object value, Type targetType, object parameter, string culture) { throw new NotSupportedException(); } }