Я нахожусь в процессе создания пользовательского элемента управления Silverlight 4, содержащего холст с несколькими элементами FrameworkElements, и преобразования его для использования привязки данных.
XAML для моего оригинального холста был:
<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>
Здесь отображаются прямоугольник и изображение, а также событие MouseLeftButtonDown, которое затем обрабатывает такие операции, как перетаскивание и изменение размера.
Чтобы это работало с привязкой данных, я создал объект с именем 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; }
}
ElementContent используется для хранения прямоугольника или изображения. Я заполняю ObservableCollection под названием CanvasElements и назначаю DataContext элемента управления. Я изменил свой 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>
Мои элементы появляются, но CanvasElement_MouseLeftButtonDown не запускается. Я также использовал ContentControl в ItemsControl.
Мои вопросы:
Это разумный путь?
Почему MouseLeftButtonDown не запускается?