Warum kann ich in einem Border / ContentControl keine leeren Bereiche antippen / anklicken, ohne den Hintergrund des Kindes auf transparent zu setzen?

Endlich konnte ich ein "einfaches" transparentes Tastensteuerelement erstellen, das auf a basiertContentControl. Kann jemand erklären, warum ich keine leeren Bereiche des Steuerelements anklicken / antippen konnte, bis ich den Hintergrund des untergeordneten Elements auf transparent gesetzt habe? Ich bin auf dieses Problem auch gestoßen, als:

Ich habe versucht, Border zu verwendenIch habe dieControlTemplate einer Taste statt derContentTemplate.

Hier ist meine "Button" -Klasse:

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();
    }
}

Es ist ziemlich spezifisch für meine Fälle, wenn ich ein Grid-Kind annehme, aber es funktioniert. Der Grund, warum ich es benutze, ist für Listen (Nicht-ListBox) mit aktiviertem TiltEffect.

Kontext des Problems:

<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>

Wenn Sie zwischen den StackPanels innerhalb des Elements klicken, wird kein Ereignis ausgelöst und nichts passiert. Nur wenn der Hintergrund des Gitters istTransparent nimmt es "Platz in Anspruch".

Ich komme aus einem Web-Hintergrund, das ist also verwirrend. Ein enthaltendes Element sollte "hit testable" sein, auch wenn der Hintergrund nicht gesetzt ist.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage