J'utilise la dernière version de Silverlight 2.0 dans Visual Studio 2008. Je simple UserControl Silverlight avec le code suivant:Actualiser Silverlight UserControl via XAML
public partial class SilverlightControl1 : UserControl
{
public SilverlightControl1()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(SilverlightControl1_Loaded);
Composite = new Composite();
}
void SilverlightControl1_Loaded(object sender, RoutedEventArgs e)
{
Composite.Width = this.Width/2.0;
Composite.Height = this.Height/2.0;
if (!this.LayoutRoot.Children.Contains(Composite))
this.LayoutRoot.Children.Add(Composite);
}
public Composite Composite
{
get;
set;
}
}
public class Composite : ContentControl
{
private Grid grid;
private Canvas canvas;
public Composite()
{
if (grid == null) grid = new Grid();
if (canvas == null) canvas = new Canvas();
if (!grid.Children.Contains(canvas))
grid.Children.Add(canvas);
Content = grid;
this.Loaded += new RoutedEventHandler(Composite_Loaded);
}
private Rectangle rectangle;
void Composite_Loaded(object sender, RoutedEventArgs e)
{
if (rectangle == null) rectangle = new Rectangle();
Canvas.SetTop(rectangle, 0);
Canvas.SetLeft(rectangle, 0);
rectangle.Fill = new SolidColorBrush(Color);
rectangle.Width = Width;
rectangle.Height = Height;
if (!canvas.Children.Contains(rectangle))
canvas.Children.Add(rectangle);
}
public Color Color
{
get;
set;
}
}
J'utilise ensuite ce UserControl dans une application Silverlight , le XAML de la page qui ressemble à ceci:
<UserControl x:Class="SilverlightApplication1.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:test="clr-namespace:SilverlightClassLibrary1;assembly=SilverlightClassLibrary1"
Width="400" Height="300">
<Grid x:Name="LayoutRoot" Background="Green">
<test:SilverlightControl1 Name="uControl1">
<test:SilverlightControl1.Composite>
<test:Composite Color="Yellow"/>
</test:SilverlightControl1.Composite>
</test:SilverlightControl1>
</Grid>
</UserControl>
Ma question est la suivante: quel code dois-je ajouter à ce qui précède afin qu'en changeant « Couleur composite » à quelque chose d'autre que le jaune et en appuyant sur le bouton de retour, UserControl est actualisé automatiquement? Comme le code l'indique, la seule façon d'actualiser UserControl est de déplacer la barre Slider dans l'EDI VS2008, ce qui modifie le pourcentage de zoom de la page Silverlight. Une question secondaire, bien que de moindre importance à la question ci-dessus, est: avec le code tel qu'il est ci-dessus, pourquoi ne puis-je pas changer la couleur "Background" de LayoutRoot? Si je supprime mon UserControl, cela fonctionne comme prévu.
Merci pour la réponse, Correl! J'ai implémenté les propriétés Composite et Color en tant que propriétés Dependency, comme vous l'avez suggéré, mais cela n'a malheureusement pas changé le problème! –
En regardant le code, je pense que le problème ici est que vous définissez la couleur dans les événements OnLoaded. Lorsque vous modifiez la couleur, vous ne forcez pas VS à recharger le contrôle, de sorte que l'événement n'est pas renvoyé. Au lieu de définir le remplissage du rectangle sur la valeur de couleur, essayez plutôt de le lier. De cette façon, lorsque la couleur change, la propriété Dépendance se déclenche et la met à jour. –
Merci Correl! J'ai la propriété Color implémentée en tant que propriété Dependency à l'aide de DependencyObject.GetValue et SetValue. Lorsque je définis le remplissage du rectangle, la propriété Color est donc déjà liée à la propriété de dépendance, non? –