ich WPF bin mit Visual Studio 2008 habe ich eine einfache WPF Usercontrol mit dem folgenden Code habe:Aktualisieren WPF Usercontrol über XAML
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
Composite = new Composite();
}
protected override void OnRender(DrawingContext drawingContext)
{
//LayoutRoot is name of default Grid instance
if (!LayoutRoot.Children.Contains(Composite))
{
LayoutRoot.Children.Add(Composite);
}
}
public Composite Composite
{
get;
set;
}
}
public class Composite : ContentControl
{
protected override void OnRender(DrawingContext drawingContext)
{
drawingContext.DrawRectangle(new SolidColorBrush(Color), new Pen(Brushes.Black, 1.0), new Rect(RenderSize));
}
public Color Color
{
get;
set;
}
}
ich dann dieses Benutzersteuerelement in einer WPF-Anwendung verwenden, die XAML der Seite suchen wie folgt aus:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:test="clr-namespace:WpfControlLibrary1;assembly=WpfControlLibrary1"
Title="Window1" Height="500" Width="700" Background="AliceBlue">
<test:UserControl1 Name="uControl1">
<test:UserControl1.Composite>
<test:Composite Color="Green"/>
</test:UserControl1.Composite>
</test:UserControl1>
</Window>
Meine Frage ist: was Code kann ich auf die oben hinzuzufügen, so dass durch „Composite-Farbe“ auf etwas anderes als Grün zu ändern und die Return-Taste schlagen, das Usercontrol automatisch aktualisiert? Das Verhalten, nach dem ich suche, ist, was passiert, wenn Sie den Hintergrund von Window1 auf eine andere Farbe als AliceBlue ändern und zurück drücken.
Wenn ich den Code die richtige Farbe zeigt, ist das Problem mit der Aktualisierung zur Designzeit über XAML.
Vielen Dank für Hinweise, die mir helfen zu verstehen, was hier vor sich geht!
Dank Nicholas, aber dieser Code erzeugt einen System.Windows.Markup.XamlParseException Fehler, wenn auf mein Codebeispiel angewendet. Wenn ich den FrameworkPropertyMetadataOptions.AffectsRender-Parameter aus dem FrameworkPropertyMetadata-Konstruktor entferne, erhalte ich den Fehler nicht, aber mein Problem ist nicht gelöst. –
Das ist, was ich bekomme, um meinen Code nicht vollständig zu testen! Ich habe den Code aktualisiert und getestet, dass er funktioniert. Ich habe die DependencyProperty versehentlich auf null initialisiert, was mit einer XamlParseException fehlschlägt. Indem Sie den Wert mithilfe der neuen Farbe() auf Weiß initialisieren, wird DependencyProperty initialisiert und der Designer aktualisiert, sobald Sie die Farbe ändern. Entschuldigen Sie. –
Das funktioniert jetzt, danke Nicholas! Das Festlegen des defaultValue-Parameters auf null scheint nur dann ein Problem zu sein, wenn Sie einen flags-Parameter definieren, andernfalls funktioniert null einwandfrei. Wie auch immer, ich kann jetzt deine Antwort als Antwort markieren. Danke noch einmal! –