Por que não posso tocar / clicar em áreas em branco dentro de um Border / ContentControl sem definir o plano de fundo da criança como transparente?
Eu finalmente consegui criar um controle de botão transparente "fácil", baseado em umContentControl
. No entanto, alguém pode explicar por que eu não pude clicar / tocar em nenhuma área em branco do controle até definir o plano de fundo do elemento filho como transparente? Eu me deparei com esse problema também quando:
Aqui está minha classe "button":
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();
}
}
É bastante específico para os meus casos quando uso (assumindo um filho de grade), mas funciona. A razão pela qual eu uso é para listas (não-ListBox) com o TiltEffect ativado.
Contexto do problema:
<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>
Se você clicar entre os StackPanels dentro do item, nenhum evento será disparado e nada acontecerá. Somente quando o fundo da grade éTransparent
isso "ocupa espaço".
Eu venho de um plano de fundo da web, então isso é confuso; um elemento de contenção deve ser "testável", mesmo quando o plano de fundo não está definido.