我正在创建一个Silverlight 4 UserControl,其中包含一个具有多个FrameworkElements的画布并将其转换为使用数据绑定。当数据绑定到Silverlight ContentControl时,鼠标事件不会触发
的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用于存储矩形或图像。我填充名为CanvasElements的ObservableCollection并分配控件的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不火。我也在ItemsControl中使用了ContentControl。
我的问题是:
这是明智的方式吗?
为什么MouseLeftButtonDown不能触发?
嗨,MouseLeftButtonDown不会触发,因为您已经在ItemsControl的数据模板中定义了它。 – Malcolm 2010-05-19 10:38:08
谢谢马尔科姆 - 在这种情况下,我真的在哪里放置事件处理程序。 – 2010-05-19 10:58:14
您在ContentControl中包含哪些内容?这可能是因为鼠标事件并没有冒泡内容控件来触发事件。 – AnthonyWJones 2010-05-19 11:54:26