私はそれを外にクリックすると崩壊しなければならない目に見えるグリッドがあります。私は半分それを解決した。グローバルクリックを検出するUWP
MainPage.xamlをコード:
<StackPanel Width="400" VerticalAlignment="Center">
<Button x:Name="btnOne" Content="Button One" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="30"/>
<Button x:Name="btnShowGrid" Content="Show Grid" Click="btnShowGrid_Click" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="30"/>
<Grid x:Name="ControlGrid" PointerEntered="ControlGrid_PointerEntered" PointerExited="ControlGrid_PointerExited" HorizontalAlignment="Center" Visibility="Visible" Background="LightGreen" Height="300" VerticalAlignment="Top" Width="300" Margin="30"/>
</StackPanel>
MainPage.xaml.csコード:
bool PointerInGrid = false;
public MainPage()
{
this.InitializeComponent();
}
protected override void OnPointerPressed(PointerRoutedEventArgs e)
{
base.OnPointerPressed(e);
if (!PointerInGrid)
{
ControlGrid.Visibility = Visibility.Collapsed;
}
}
private void btnShowGrid_Click(object sender, RoutedEventArgs e)
{
ControlGrid.Visibility = Visibility.Visible;
}
private void ControlGrid_PointerEntered(object sender, PointerRoutedEventArgs e)
{
PointerInGrid = true;
}
private void ControlGrid_PointerExited(object sender, PointerRoutedEventArgs e)
{
PointerInGrid = false;
}
私はグリッドにクリックした場合、私は、グリッドをクリックし崩壊していけば、これは、表示されたままこれまでのところすべては問題ありませんが、btnOneをクリックするとグリッドが表示されたままになります。
グローバルクリックでグリッドを崩壊させることは可能ですか?
いつもありがとうございます。 Windowsフォームで動作します
コード:それはイベントハンドラOnPointerPressed
が実行される基本的な親に到達することはできませんので、
const int WM_PARENTNOTIFY = 0x0210;
const int WM_LBUTTONDOWN = 0x0201;
public Form1()
{
InitializeComponent();
}
protected override void WndProc(ref Message m)
{
if (!DesignMode)
{
if (m.Msg == WM_PARENTNOTIFY)
{
if (m.WParam.ToInt32() == WM_LBUTTONDOWN)
{
MessageBox.Show("Clicked!");
}
}
}
base.WndProc(ref m);
}
btnOneは正しいです。しかし、私はクリックを傍受したかったのです。質問を、Windowsフォームで動作するコードスタックで更新して、達成したいことをよりよく理解してください。 – LightGreen
親によって処理されなかった場合にイベントが親で発生し、次に子に渡されるメカニズムは、WPFのPreviewMouseDownイベントのように_event tunneling_と呼ばれ、常に親で最初に起動されます。しかし、UWPでは、トンネリングはサポートされていないようです。バブリングイベントのみがサポートされています。つまり、イベントは最初に子プロセスによって処理されます。私はあなたが提供したWinFormサンプルコードは、Win32のトンネリングに相当すると思います。 – kennyzx
UWPのために、UserControlをクリックして閉じると、UserControlを閉じる方法がありますか? – LightGreen