3

私はついに、に基づいて「簡単な」透明なボタンコントロールを作成することができました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「スペースを占める」場合にのみ。

私はウェブのバックグラウンドから来ているので、これは混乱を招きます。包含要素は、背景が設定されていない場合でも「ヒットテスト可能」である必要があります。

4

1 に答える 1

12

背景のないオブジェクトは、通常、XAML用語では中空またはヒット不可と呼ばれます。したがって、オブジェクトがヒットに応答するように背景を設定する必要があります。透明なオブジェクトのヒットテストを実行するには、背景を透明に設定する必要があります。

ヒットテストに関する詳細情報

http://msdn.microsoft.com/en-us/library/ms752097.aspx

于 2013-02-03T09:26:07.857 に答える