2011-09-14 2 views
0

J'ai un problème et j'ai besoin de votre aide. Voici mon code:Attribution d'une ressource ContentControl à un élément ContentControl hérité

public class CircleElement : ContentControl 
{ 

public ContentControl me; 
private FrameworkElement _parent; 

public CircleElement() 
{ 
    if (_parent != null) 
    { 
    me = (ContentControl)_parent.FindResource("CircleRes"); 
    me.Style = (Style)_parent.FindResource("CircleStyle"); 
    } 

} 

Le CircleElement hérite ContentControl et je voudrais affecter les ressources « CircleRes » et le style « CircleStyle » à elle. Quelque chose comme:

this = (ContentControl)_parent.FindResource("CircleRes"); 
this.Style = (Style)_parent.FindResource("CircleStyle"); 

Cette chose n'est pas allowable.So pour contourner ce problème, j'instancié l'élément ContentControl me; mais le code est un peu désordonné !! Comment l'obtenir plus "élégant" ???

Merci à l'avance

Paolo

+0

Pourquoi vous faites cela? Peux-tu expliquer? "J'ai deux vues (par exemple, rend des limites d'une sorte), un bla-bla ..., et une vue qui est sur le point de rendre à l'intérieur des deux vues ...", par exemple. Je ne comprends tout simplement pas pourquoi vous essayez de faire une chose par programmation plutôt que par déclaration? –

+0

parce que j'ai besoin de créer autant de cercles dans une toile que l'utilisateur clique sur un bouton "créer des cercles" .J'ai résolu le problème en changeant la balise de ressource de à puis appeler dans le constructeur: this.Content = _parent.FindResource ("CircleRes"); this.Style = (Style) _parent.FindResource ("CircleStyle"); – rebe21

Répondre

0

Votre exigence est un peu étrange, mais il est possible de multiples façons ...

Au lieu d'avoir un autre contrôle de contenu (c.-à-me) Pourquoi ne pas this le contenu du contrôle lui-même?

this.Content 
      = (ContentControl)_parent.FindResource("CircleRes"); 
    ((ContentControl)(this.Content)).Style 
      = (Style)_parent.FindResource("CircleStyle"); //*** Potential problem 

Problème: L'énoncé du problème potentiel est marqué de cette façon parce que votre code (et le mien aussi) définit le style "CircleStyle"-"CircleRes" ressource par référence.

Comment? me ou ((ContentControl)(this.Content)) est rien, mais "CircleRes" ressource!

Cela signifie que si "CircleRes" est référencé dans un autre endroit, il portera le "CircleStyle" avec son propre style. Et si vous définissez une nouvelle Style-"CircleRes" ailleurs il va remplacer le Style de "CircleRes" où est utilisé, y compris le code ci-dessus (où le style est destiné "CircleStyle")

Solution: Utilisez ContentTemplate à la place. Les modèles ne provoquent pas de visuel par référence d'instance.

Donc en fait vous devriez avoir un DataTemplate (disons "CircleResTemplate") et le définir comme ContentTemplate à la classe CircleElement.

this.ContentTemplate 
     = (DataTemplate)_parent.FindResource("CircleResTemplate"); 
    this.Style 
     = (Style)_parent.FindResource("CircleStyle"); 

Faites-moi savoir si cela répond à votre question.

Questions connexes