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
Antwort
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
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"/>
danke für Ihre Antwort. Ich werde versuchen – Prathap
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
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: '
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
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. –
festhalten. Warum nicht Arbeit? (Ich habe einige Größen zum Testen hinzugefügt). –
sous2817