J'ai implémenté quelques comportements et déclencheurs personnalisés et les ai ajoutés via XAML. Ils fonctionnent bien lors de l'exécution mais empêchent le chargement de la vue du concepteur CIDER au moment de la conception, et causeront vraisemblablement un problème dans Blend, bien que je ne l'aie pas confirmé.Problème de conception avec les comportements personnalisés et les déclencheurs dans Silverlight
Voici un aperçu de ce que j'ai implémenté pour l'un des comportements; J'espère que quelqu'un peut signaler ce qui me manque.
Le comportement ressemble à ceci; Une implémentation en XAML ressemble à ceci:
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Interactivity;
namespace MiX.Core.UI.Silverlight
{
public class UpdateOnTextChangedBehavior : Behavior<TextBox>
{
protected override void OnAttached()
{
base.OnAttached();
this.AssociatedObject.TextChanged += OnAssociatedObjectTextChanged;
}
void OnAssociatedObjectTextChanged(object sender, TextChangedEventArgs e)
{
BindingExpression binding = this.AssociatedObject.GetBindingExpression(TextBox.TextProperty);
if (binding != null)
{
binding.UpdateSource();
}
}
protected override void OnDetaching()
{
base.OnDetaching();
this.AssociatedObject.TextChanged -= OnAssociatedObjectTextChanged;
}
}
}
<TextBox x:Name="Username" Text="{Binding Username,Mode=TwoWay}" BorderThickness="1" Style="{StaticResource TextBoxStyleGeneral}" Foreground="#FF333333" FontSize="10" BorderBrush="{x:Null}" Grid.Column="1" d:LayoutOverrides="GridBox" Margin="2,0" Grid.ColumnSpan="2" Background="{x:Null}" VerticalAlignment="Center" Grid.Row="1">
<i:Interaction.Behaviors>
<mixcore:UpdateOnTextChangedBehavior/>
</i:Interaction.Behaviors>
</TextBox>
Dans l'éditeur XAML l'élément <mixcore:UpdateOnPasswordChangedBehavior/>
est mis en évidence avec un gribouillis et signale l'erreur Une valeur de type « UpdateOnTextChangedBehavior » ne peut pas être ajouté à une collection ou un dictionnaire de type « BehaviorCollection ». Lors de la tentative d'affichage en mode Création, le concepteur ne parvient pas à se charger, indiquant Le document contient des erreurs qui doivent être corrigées avant que le concepteur puisse être chargé.
Démarrage d'un nouveau projet et la copie de votre exemple de code semble fonctionner très bien (pour moi) en VS2010 sans concepteur ou Blend questions. Faites-vous autre chose avec le TextBox ou Behaviour dans le code-behind? –
Dan, tu as l'air d'avoir raison. Dans l'application réelle, il y a deux actions à part ce comportement et je vois que l'une d'entre elles appelle une méthode qui utilise la réflexion pour définir les valeurs de propriété de dépendance. Peut-être que c'est ce qui l'empêche de travailler au moment du design. –