基本上我爲Silverlight創建了一個「Adorner」類,它允許用戶移動,縮放和旋轉它所裝飾的任何對象。這種方式的工作原理是Adorner監視它的子元素上的任何鼠標事件並作出相應的響應。如何在Silverlight中的Canvas上「僞造」鼠標單擊事件?
這適用於橢圓和矩形等簡單元素。但我有一個自定義元素,其中包含一個圖像和一個標籤內的畫布。
我的問題是這樣的。我希望用戶能夠獨立地從圖像中移動標籤,但只將偏移量保持爲偏移量(因此,爲什麼我不只是讓它們分別添加圖像和標籤)。這意味着標籤需要使用Canvas.Left和Canvas.Top屬性。但是,每當我添加這些標籤時,標籤就變得無法點擊......即當點擊標籤時,該元素不再識別點擊,但它仍然響應用戶單擊圖像。
我認爲這與Canvas元素沒有自動佈局控制的方式有關。
另一種方法是使用網格並設置Margin.Top和Margin.Left,它可以工作,但不允許有負邊距 - 因此標籤將永遠不會出現在圖像的左上方這對我們的需求是不能接受的。 (這不是真的,它可以出現在左上方,但當它具有負邊距時,它會停止響應鼠標事件)
因此,我想知道是否有反正我可以捕獲鼠標單擊事件標籤(MouseLeftButtonDown)然後以某種方式假裝它直接來自畫布 - 我相信這會解決我的問題,但我不知道它是否可能。
如果有人有任何想法,他們將非常感謝!
編輯:這是我的自定義元素的XAML。當單擊TextBlock時,該元素不會觸發MouseLeftButtonDown事件,但在單擊該圖像時會觸發該事件。
<UserControl x:Class="SitePlanViewer.Components.Visual.BoreholeElement"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Border x:Name="Border" BorderBrush="Transparent" BorderThickness="2" Margin="-5">
<Canvas x:Name="MainCanvas" Margin="5" MinWidth="12" MinHeight="12">
<Image x:Name="BoreholeImage" Source="/Images/BoreholeSymbol.png" VerticalAlignment="Center" Width="12" Height="12" />
<TextBlock x:Name="Label" FontSize="8" Canvas.Left="40" Canvas.Top="20" />
</Canvas>
</Border>
</UserControl>
你能提供一些XAML例子嗎?您仍應該能夠在標籤上獲得鼠標事件(除非在其中或在父元素中禁用了命中測試)。 – 2010-11-12 12:08:27
嗨,我爲我的自定義元素添加了XAML。 – 2010-11-12 12:22:37