Kirill
Kirill

Reputation: 459

Detect click outside control

I display TestControl in grid when user clicks on the button:

<Grid>
    <myControls:TestControl Panel.ZIndex="2" Visibility="Collapsed" Width="100" Height="100" />
    <Button "Open Test Control" Click="btnOpen_Click" />
</Grid>

How can I hide TestControl when user clicks outside this control?

Upvotes: 4

Views: 2498

Answers (2)

mm8
mm8

Reputation: 169420

You could handle the PreviewMouseLeftButtonDown event for the Grid:

<Grid Background="Transparent" PreviewMouseLeftButtonDown="Grid_PreviewMouseLeftButtonDown">
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>
    <myControls:TestControl x:Name="tc" Visibility="Collapsed" Width="100" Height="100" />
    <Button Content="Open Test Control" Click="btnOpen_Click" Grid.Row="1" />
</Grid>

private void Grid_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    if (!tc.IsMouseOver)
        tc.Visibility = Visibility.Collapsed;
}

Upvotes: 4

Krzysztof Skowronek
Krzysztof Skowronek

Reputation: 2946

Haven't tried it, but LostFocus event may be a way to go, given that you set focus to your test control after showing it.

Upvotes: 0

Related Questions