我正在創建一個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