0

Player (一種の) コントロールを作成しようとしています。ボタンのユーザーコントロールが既に利用可能です(会社のコントロール)。ボタンのコンテンツに追加する画像の形状をボタンに与えようとしています。

問題は、テンプレートのスタイリング (画像の境界に従ってボタンの境界に合わせること) を削除すると、ボタンをクリックしようとすると関連付けられた ToolBarCommand を起動できないことです。基本的に、ボタン自体をクリックすることはできません。

これについてゴーグリングしてもあまり役に立ちませんでした。私IsHitTestVisible="False"は画像を試してみましたが、それも役に立ちませんでした。

以下は私のコードです:

                <my:NewButton  Command="{Binding ToolBarCommand}" CommandParameter="Play">
                    <my:NewButton.Style>
                        <Style>
                            <Setter Property="my:NewButton.Template">
                                <Setter.Value>
                                    <ControlTemplate TargetType="{x:Type my:NewButton}">
                                        <ContentPresenter HorizontalAlignment=" TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </my:NewButton.Style>
                    <my:NewButton.Content>
                        <Image Source="{Binding PlayState}" IsHitTestVisible="False" />
                    </my:NewButton.Content>
                </my:NewButton>

どんな助けでも大歓迎です。PS: VS2012、.net 4.0

4

3 に答える 3

0

画像に設定IsHitTestVisible="False"すると、クリックを確認するために「背後」に何か他のものがない限り、ボタンはクリックできません(XAMeLiの回答の透明な境界線のように)。ただし、IsHitTestVisible が true (デフォルト) の場合は、そうなるはずです。次の例では、画像が透明であっても Click イベントが発生します。

<Button Click="Button_Click">
    <Button.Template>
        <ControlTemplate TargetType="Button">
            <ContentPresenter RecognizesAccessKey="True" />
        </ControlTemplate>
    </Button.Template>
    <Image Source="..." />
</Button>

これがうまくいかない場合は、NewButtonクラスで何かおかしなことが起こっているに違いないと思います。

私の理解が正しければ、ボタンのクリック可能な領域を画像の非透明領域で定義する必要があります。

設定IsHitTestVisibleすると、透明な領域だけでなく、画像要素全体がクリックできなくなります。これが役立つ唯一の方法は、クリックをキャプチャするために画像の背後に透明な形状がある場合です。

画像自体の使用に関しては、WPF に組み込みのサポートがあるとは思いません。Window.allowTransparencyを使用して、この方法でウィンドウ全体の形状を定義できますが、ここでは役に立ちません。

整形したい画像要素でHitTestCoreをオーバーライドして、ヒット テストを手動で実装する必要があります。これを行う方法の例をここに示します。

于 2013-10-16T18:25:36.807 に答える