私はついに、に基づいて「簡単な」透明なボタンコントロールを作成することができましたContentControl
。ただし、子要素の背景を透明に設定するまで、コントロールの空白の領域をクリック/タップできない理由を誰かが説明できますか?私は次の場合にもこの問題に遭遇しました:
- Borderを使ってみました
- ContentTemplateではなくボタンのControlTemplateを設定しました。
これが私の「ボタン」クラスです。
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();
}
}
これは(グリッドの子を想定して)使用する場合の私のケースにかなり固有ですが、機能します。私がそれを使用する理由は、TiltEffectが有効になっているリスト(非リストボックス)のためです。
問題のコンテキスト:
<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>
アイテム内のStackPanel間をクリックしても、イベントは発生せず、何も起こりません。グリッドの背景がTransparent
「スペースを占める」場合にのみ。
私はウェブのバックグラウンドから来ているので、これは混乱を招きます。包含要素は、背景が設定されていない場合でも「ヒットテスト可能」である必要があります。