2014-11-24 68 views
0

在自定義控件中,我有作爲內容的stackpanel(水平)en,Textblock和Button。如何將自定義控件中的按鈕帶到「前面」?

自定義控件的工作原理和結果是一個矩形,它是我的local:DropDownToggleButton
此矩形分爲兩個子矩形:左邊的是<TextBlock Text="Test"部分,右邊是按鈕<Button x:Name="ButtonTest,它被拉伸以填充矩形的高度。

但是,當我點擊矩形的右上部分時,本地:DropDownToggleButton本身接收事件,而不是在那裏也出現的按鈕。就好像按鈕只響應在按鈕內容中由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

原因按鈕沒有反應,是因爲你已經採取了大部分你所期望的一個按鈕,有什麼了,你的按鈕模板只是ContentPresenter,使按鍵字面上只有文本塊。嘗試

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

明天我會試試。那麼,在這種情況下,我不必使用類似Border_Click的東西? – Gerard 2014-11-24 17:26:18

+0

沒有邊框只是給按鈕一個元素來捕捉點擊,它會傳播到按鈕點擊處理程序 – ndonohoe 2014-11-24 17:32:05

+0

它的工作原理就像我想象的那樣。是否也可以強制ContentPresenter(無論如何)以與邊框相同的方式伸展自己? – Gerard 2014-11-25 08:29:55

相關問題