Je suis en train de prendre un contrôle utilisateur Silverlight 4 contenant un canevas contenant un certain nombre de FrameworkElements et de le convertir pour utiliser la liaison de données.Les événements de la souris ne se déclenchent pas lors de la liaison de données à un Silverlight ContentControl
Le XAML pour ma toile originale était:
<Canvas x:Name="panelDisplay" >
<Rectangle Width="50" Height="50" MouseLeftButtonDown="Element_MouseLeftButtonDown" Stroke="Aqua" StrokeThickness="5" Fill="Aquamarine" Canvas.Left="450" Canvas.Top="50" x:Name="rect1" />
<Image Source="../Images/3.jpg" Stretch="UniformToFill" Width="356" Height="224" MouseLeftButtonDown="Element_MouseLeftButtonDown" Canvas.Left="317" Canvas.Top="140" x:Name="image1" />
</Canvas>
Affiche le rectangle et l'image et l'événement se déclenche MouseLeftButtonDown qui traite ensuite des opérations telles que glisser le redimensionnement.
Afin d'obtenir ce travail avec databinding j'ai créé un objet appelé CanvasElement:
public class CanvasElement
{
public CanvasElement(int id, object elementContent, double width, double height, int left, int top)
{
Id = id;
ElementContent = elementContent;
Width = width;
Height = height;
Left = left;
Top = top;
}
public int Id { get; set; }
public object ElementContent { get; set; }
public double Width { get; set; }
public double Height { get; set; }
public int Left { get; set; }
public int Top { get; set; }
}
Le ElementContent est utilisé pour stocker le rectangle ou l'image. Je remplis un ObservableCollection appelé CanvasElements et assigne le DataContext du contrôle. J'ai changé XAML à:
<Canvas x:Name="panelDisplay" >
<ItemsControl x:Name="CanvasElements" ItemsSource="{Binding Path=CanvasElements}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Canvas>
<ContentControl Content="{Binding Path=ElementContent}" Height="{Binding Path=Height}" Width="{Binding Path=Width}"
Canvas.Left="{Binding Path=Left}" Canvas.Top="{Binding Path=Top}"
MouseLeftButtonDown="CanvasElement_MouseLeftButtonDown" />
</Canvas>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Canvas>
Mes éléments apparaissent, mais le CanvasElement_MouseLeftButtonDown ne se déclenche pas. J'ai également utilisé ContentControl dans ItemsControl.
Mes questions sont les suivantes:
Est-ce est une façon raisonnable d'aller?
Pourquoi MouseLeftButtonDown ne se déclenche-t-il pas?
Bonjour, le MouseLeftButtonDown ne se déclenchera pas car vous l'avez défini dans un datatemplate de ItemsControl. – Malcolm
Merci Malcolm - où dois-je réellement mettre le gestionnaire d'événements dans cette situation. –
Quel contenu incluez-vous dans ce ContentControl? Il se peut que l'événement souris ne fasse pas bouillir le contrôle de contenu pour déclencher l'événement. – AnthonyWJones