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