2016-08-11 78 views
0

我想在我的應用程序中實現一些祕密功能,並且只能通過ctrl左鍵單擊按鈕的下半部分來調用它們。這可能在WPF中實現嗎?我試圖創建一個演示應用程序,並且調試不會在單擊事件處理程序中向我顯示光標位置信息。以下是我的測試代碼。有任何想法嗎?如何僅在用戶按下按鈕的下半部時觸發事件?

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:WpfApplication1" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="255.284" Width="313.918"> 
    <Grid> 
     <Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="81,89,0,0" VerticalAlignment="Top" Width="158" Height="49" Click="button_Click"/> 
    </Grid> 
</Window> 
using System.Windows; 

namespace WpfApplication1 
{ 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void button_Click(object sender, RoutedEventArgs e) 
     { // <----- set break point here, can't find cursor info in e and sender 

     } 
    } 
} 

回答

0

您可以使用Mouse.GetPosition獲得相對於按鈕的角落光標位置,位置比較按鈕的ActualHeight

var pos = Mouse.GetPosition(button); 
if(pos.Y >= button.ActualHeight * 0.5) 
{ 
    //do something 
} 
0

可以使用MouseUp或MouseDown事件,這兩個事件都爲您提供鼠標在事件參數中的位置,以及按下了哪個鼠標按鈕。

當在按鈕內部擡起鼠標按鈕時觸發鼠標上升,而在按鈕內按下時鼠標按下(您能猜到?)。

編輯:我剛纔檢查的MouseDown的細節,你將不得不使用

Point p = e.GetPosition(yourButton); 

獲得鼠標相對於按鈕的位置(您可以通過任何控制代替yourButton讓鼠標相對於它的位置)

0

在現有按鈕的下半部分的頂部添加第二個按鈕,但將其設置爲對用戶不可見。

然後,您可以對其點擊處理程序進行編程,以完成您想要的操作,甚至可以激活底層可見按鈕的點擊處理程序(如果您願意的話)。

+0

我不知道這是一個乾淨的方式來做到這一點.... –

+0

爲什麼不呢? OP在單擊GUI上的某個區域時需要特殊功能。這聽起來像一個按鈕的工作。 – user2647513

+0

我可能會工作,但如果你可以做到這一點,而無需添加新的(隱藏的)UI元素,對我來說它更清潔 –

0

有很多方法可以做到這一點!

除了提供的答案,我認爲這是正確的,你也可以玩弄佈局。例如,你可以定義一個邊界,包含兩個按鈕,其中用戶會認爲,只有一個按鈕:

<Grid HorizontalAlignment="Center" VerticalAlignment="Center" Width="250" Height="100" > 
    <Border BorderBrush="Black" BorderThickness="1" MouseEnter="border_MouseEnter" MouseLeave="border_MouseLeave"> 
     <StackPanel> 
      <Button VerticalAlignment="Top" Height="50" Style="{StaticResource ButtonStyle}" Content="MainButton"></Button> 
      <Button VerticalAlignment="Bottom" Content="SecretArea" Style="{StaticResource ButtonStyle}" Height="50" Click="Button_Click"></Button> 
     </StackPanel> 
    </Border> 
</Grid> 

通過從你所述的在風格的按鈕刪除邊框,你有這樣的事情:

enter image description here

您還可以設置邊框的背景顏色,當用戶將鼠標懸停其鼠標放在它,使用的MouseEnter和鼠標離開事件。

無論如何,當用戶點擊這個祕密區域按鈕,你可以簡單地處理該事件:

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
     MessageBox.Show("Secret Area"); 
} 
相關問題