如何将自定义控件中的按钮带到前面"?

时间:2014-11-24 16:30:13

标签: wpf xaml mouseevent

在自定义控件中,我有一个stackpanel(水平)en内容,一个Textblock和一个Button。

自定义控件有效,结果是一个矩形,即local:DropDownToggleButton 这个反应角分为两个子矩形:左边是<TextBlock Text="Test"部分,右边是按钮<Button x:Name="ButtonTest,它被拉伸以填充矩形的高度。

但是,当我单击矩形的右上角时,local:DropDownToggleButton本身会接收事件而不是那里也存在的按钮。就好像Button只响应按钮内容中Textblock接收的鼠标事件。如何使按钮的整个区域响应鼠标点击?

自定义控件会对按钮的ClickedPreviewMouseDown事件做出反应。这两个事件都有同样的问题。同时添加Panel.ZIndex="1"也无济于事。

<local:DropDownToggleButton ToolTip="Show" DropDownButton="{Binding ElementName=ButtonTest}"
    VerticalAlignment="Stretch" VerticalContentAlignment="Stretch" Padding="0" BorderThickness="0"
     Style="{StaticResource {x:Static ToolBar.ToggleButtonStyleKey}}">
    <local:DropDownToggleButton.DropDownMenu>
        <ContextMenu>
            <ContextMenu.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Background="WhiteSmoke"></StackPanel>
                </ItemsPanelTemplate>
            </ContextMenu.ItemsPanel>
            <ContextMenu.ItemContainerStyle>
                <Style TargetType="{x:Type MenuItem}">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type MenuItem}">
                                <TextBlock Padding="6" Text="{TemplateBinding Header}" Background="{TemplateBinding Background}"/>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                    <Setter Property="Margin" Value="0"/>
                    <Style.Triggers>
                        <Trigger Property="TextBlock.IsMouseOver" Value="True">
                            <Setter Property="Background" Value="{StaticResource mouseover}"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </ContextMenu.ItemContainerStyle>
            <MenuItem Header="Test 1" />
            <MenuItem Header="Test 2"/>
        </ContextMenu>
    </local:DropDownToggleButton.DropDownMenu>
    <StackPanel Orientation="Horizontal" VerticalAlignment="Stretch">
        <TextBlock Text="Test" VerticalAlignment="Center"/>
        <Button x:Name="ButtonTest" ToolTip="Other" Padding="0" Margin="0" VerticalContentAlignment="Stretch" VerticalAlignment="Stretch">
            <Button.Template>
                <ControlTemplate TargetType="Button">
                    <ContentPresenter/>
                </ControlTemplate>
            </Button.Template>
            <TextBlock FontSize="16" FontFamily="Marlett" Text="6" VerticalAlignment="Center" />
        </Button>
    </StackPanel>
</local:DropDownToggleButton>

1 个答案:

答案 0 :(得分:1)

按钮没有反应的原因是因为你已经拿走了按钮所需的大部分内容,你的按钮模板只是ContentPresenter,所以按钮实际上只是文本块。试试

        <ControlTemplate TargetType="Button">
            <Border Background="Transparent">
                <ContentPresenter/>
            </Border>
        </ControlTemplate>