Dlaczego nie mogę stuknąć / kliknąć pustych obszarów wewnątrz kontrolki Border / ContentControl bez ustawienia tła dziecka na przezroczyste?

W końcu udało mi się stworzyć „łatwą” przezroczystą kontrolkę przycisków, opartą na aContentControl. Czy jednak ktoś może wyjaśnić, dlaczego nie mogę kliknąć / dotknąć żadnych pustych obszarów kontrolki, dopóki nie ustawię przezroczystego tła elementu potomnego? Wpadłem na ten problem również wtedy, gdy:

Próbowałem użyć obramowaniaUstawiłemPłyta kontrolna przycisku, a nieContentTemplate.

Oto moja klasa „przycisku”:

public class TransparentButton : ContentControl {
    public TransparentButton() {            
        HorizontalContentAlignment = HorizontalAlignment.Stretch;
    }

    public override void OnApplyTemplate() {
        var child = Content as Grid;

        if (child != null) {
            child.Background = new SolidColorBrush(Colors.Transparent);
        }

        base.OnApplyTemplate();
    }
}

Jest to dość specyficzne dla moich przypadków podczas używania (zakładając dziecko siatki), ale działa. Powód, dla którego go używam, dotyczy list (nie-ListBox) z włączoną funkcją TiltEffect.

Kontekst problemu:

<ItemsControl x:Name="Items" toolkit:TiltEffect.IsTiltEnabled="True">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <controls:TransparentButton 
                cal:Message.Attach="[Event Tap] = [Action Go($dataContext)]">
                <Grid>
                    <StackPanel HorizontalAlignment="Left">
                        <TextBlock Text="{Binding Test}" />                            
                    </StackPanel>
                    <StackPanel HorizontalAlignment="Right">
                        <TextBlock Text="{Binding Test2}" />                            
                    </StackPanel>
                </Grid>
            </controls:TransparentButton>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

Jeśli klikniesz między StackPanels wewnątrz przedmiotu, żadne zdarzenie nie zostanie wystrzelone i nic się nie wydarzy. Tylko wtedy, gdy jest tło siatkiTransparent czy to „zajmuje miejsce”.

Pochodzę z tła internetowego, więc jest to mylące; element zawierający powinien być „testowany trafieniem”, nawet jeśli nie jest ustawione tło.

questionAnswers(1)

yourAnswerToTheQuestion