2016-04-07 8 views
1

Ich habe eine usercontrol, die eine Ellipse in Canvas enthält. Ich verwende dieses Steuerelement in einem anderen Fenster, und wenn ich die Hintergrundfarbe einstelle, möchte ich nur den Hintergrund der Ellipse ändern. Wie man den Ellipsen (Kind) Hintergrund ändert, ohne Canvas (Eltern) Hintergrundfarbe zu ändern?Wie ändere ich die Hintergrundfarbe von Kind Kontrolle xaml

+0

Ich habe eine bessere Kontrolle in Leinwand. . wie man den ellipsenhintergrund ändert, ohne Canvas backcolor zu ändern, wenn ich die Hintergrundfarbe in Xaml einstelle. Background = "Red" – Prathap

+0

Sie könnten alles in eine ContentControl-Stilvorlage und eine Vorlage binden, um die Füllung der Ellipse an die Vorlage zu binden. Wenn Sie es verwenden, wäre es nur eine Zeile, in der Sie die Eigenschaft einfach überall festlegen würden benutze es. Dies eliminiert auch wiederholenden Code. –

+0

festhalten. Warum nicht Arbeit? (Ich habe einige Größen zum Testen hinzugefügt). – sous2817

Antwort

2

1. Fügen Sie einen DependencyProperty dem Code-Behind Ihrer MyUserControl hinzu.

Hinweis der 3. Parameter der Register Methode ist unabhängig von dem Type Name Ihres UserControl

ist
public Brush EllipseFill 
    { 
     get { return (Brush)GetValue(EllipseFillProperty); } 
     set { SetValue(EllipseFillProperty, value); } 
    } 

    public static readonly DependencyProperty EllipseFillProperty = 
     DependencyProperty.Register("EllipseFill", typeof(Brush), typeof(MyUserControl), new PropertyMetadata(null)); 

2. einen Verweis auf die XAML-Datei hinzufügen sowohl im Haupt Window und die UserControl für den Namespace wo MyUserControl definiert:

xmlns:local="clr-namespace:WpfApplication1" 

3. Binden Sie die Fill-Eigenschaft Ihres Ellipse an die Abhängigkeitseigenschaft, die unter MyUserControl definiert wurde.

Beachten Sie die Verwendung von in AncestorType Parameter der RelativeSource Bindung.

<Viewbox> 
    <Canvas Width="100" Height="100"> 
     <Ellipse Width="50" 
        Height="20" 
        Canvas.Top="50" 
        Canvas.Left="50" 
        Fill="{Binding Path=EllipseFill, 
          RelativeSource= {RelativeSource Mode=FindAncestor, 
                  AncestorType={x:Type local:MyUserControl}}}" 
        /> 
     <Rectangle Width="20" 
        Height="40" 
        Canvas.Top="10" 
        Canvas.Left="10" 
        Fill="Blue" 
        /> 
    </Canvas> 
</Viewbox> 

4. Stellen Sie die EllipseFill Eigenschaft auf MyUserControl im Haupt Window

<local:MyUserControl EllipseFill="Red"/> 
+0

danke für Ihre Antwort. Ich werde versuchen – Prathap

+0

danke @ James Durda, Es funktioniert gut, jetzt habe ich einen Zweifel. Ich habe versucht, clr Eigentum und es funktioniert auch. Warum verwenden wir hier die Abhängigkeitseigenschaft? – Prathap

+0

Sie haben Recht, eine Abhängigkeitseigenschaft ist nicht erforderlich, um die EllipseFill-Eigenschaft in XAML explizit festzulegen. Es ist erforderlich, wenn Sie die Eigenschaft wie folgt binden möchten: '' –