Hello @Mahdi Hosseini ,
Thanks for your question.
Your control only has a single Renderer property, so XAML doesn't know where to put child items. To support adding/removing multiple renderers like ComboBox does, I recommend switching to a collection. You can refer to the following steps and code examples:
- Add
[ContentProperty]and replace Renderer with a collection.
[ContentProperty(nameof(Renderers))]
public class ShaderBackground : Control
{
public ObservableCollection<RendererBase> Renderers { get; }
= new ObservableCollection<RendererBase>();
public ShaderBackground()
{
Renderers.CollectionChanged += OnRenderersChanged;
}
private void OnRenderersChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.NewItems != null)
foreach (RendererBase r in e.NewItems)
{ /* attach/start renderer */ }
if (e.OldItems != null)
foreach (RendererBase r in e.OldItems)
r.Dispose();
}
}
- Use it in XAML like ComboBox
<local:ShaderBackground>
<local:GlowRenderer />
<local:BlurRenderer />
<local:NoiseRenderer />
</local:ShaderBackground>
- Add or remove at runtime
myShaderBackground.Renderers.Add(new GlowRenderer());
myShaderBackground.Renderers.Remove(glowRenderer);
I hope this addresses your question. If this response was helpful, please consider following the guidance to provide feedback.