2014-02-23 78 views
0

我需要製作一個矩形可點擊的按鈕,在該按鈕上它將運行一個動畫並執行一些操作的功能。我試圖瀏覽微軟的API,但是我沒有找到任何東西,因此我瘋了。這將是我最後一次碰到XAML,但我真的需要知道如何使這個工作。Windows Phone 8 XAML應用程序 - 可點擊的矩形對象

<Grid Background=Transparent> 
    <Grid same same> 
     <Rectangle MouseLeftButtonDown="moveClick" x:Name="red" 
       Fill="Red" Height="125" Width="125" Stroke="Pink" 
      StrokeThickness="10" Margin="106,196,225,348" 
      /> 
    </Grid> 
</Grid> 

這是我的一個矩形,我在應該調用的.xaml.cs文件中有一個名爲moveClick的函數。在那個函數中有一些代碼啓動了一個動畫,它將定位這個矩形。由於我有很多矩形我想動畫我正在改變目標取決於哪一個被按下。問題是,MouseEvent沒有發生。我已經搜索了好幾個小時,但微軟的幫助沒用。我不知道該怎麼辦。

我真的不能發佈比這更多的代碼,因爲那麼我不得不重寫整個由於我的個人電腦我編程沒有互聯網連接。這是我的筆記本電腦,我正在通過我的手機,因爲我的普通網絡已關閉。我的桌面沒有wifi。所以,誰有Windows應用程序經驗的人告訴我可能的原因是什麼?是因爲我在電網嗎?我看到一個地方,它必須有一個透明的背景。它是。我太無能爲力了,因爲沒有什麼可以繼續下去的,因爲無論我看到什麼,我都會發現一些無關緊要的東西。

編輯:只是爲了澄清,動畫的作品。我通過按下用於其他事物的按鈕暫時將其設置爲運行。它的工作原理。觸摸矩形時它不起作用。編輯二:我只是使用模板,並在他們稱之爲在ContentPanel下添加的東西。

回答

0

矩形它自我工作很好。 MouseLeftButtonDown被調用。這很可能是你放置它的方式。如果不查看更多XAML代碼,無法猜測。

的解決方法胡亂猜測,請嘗試使用Tap事件也是一樣,明確地設置IsHitTestVisible="True"

...... 
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
    <StackPanel> 
     <Rectangle MouseLeftButtonDown="moveClick" x:Name="red" 
       Fill="Red" Height="125" Width="125" Stroke="Pink" 
       StrokeThickness="10" Margin="106,196,225,348" 
       Tap="red_Tap" IsHitTestVisible="True" 
       /> 
    </StackPanel> 
</Grid> 
...... 

兩個事件得到當我點擊這個設置矩形調用。當IsHitTestVisible設置爲false時,兩個事件都不會被調用,就像我期望的那樣。

+0

見我的編輯用於如何放置它的簡短說明。 – Simon

+0

好吧檢查出來,也看不出有任何問題。我更新的答案顯示了我如何測試它,與您的非常相似,並且這兩個事件都被調用。對不起,如果我不能複製這個問題,不能提出比這個答案更多的東西。 – har07

1

替代/偷懶的做法是這樣的:

<Button Click="moveClick" BorderThickness="0" Background="Transparent"> 
    <Rectangle x:Name="red" 
    Fill="Red" Height="125" Width="125" Stroke="Pink" 
    StrokeThickness="10" Margin="94,184,213,336" 
    /> 
<Button> 

在你可以用遞歸函數內部矩形從這個問題抓起單擊處理:How to get children of a WPF container by type?

public static T GetChildOfType<T>(this DependencyObject depObj) where T : DependencyObject 
{ 
    if (depObj == null) return null; 

    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++) 
    { 
     var child = VisualTreeHelper.GetChild(depObj, i); 

     var result = (child as T) ?? GetChildOfType<T>(child); 
     if (result != null) return result; 
    } 
    return null; 
} 
相關問題