2011-09-15 69 views
0

我有支持自定義樣式的MenuItems的WPF ContextMenu。 MenuItem是一個ToggleButton。當ToggleButton被選中時,帶有文本框和關閉按鈕的彈出框出現。帶彈出式文本框的MenuItem

<Style TargetType="MenuItem"> 
     <Setter Property="Foreground" Value="{StaticResource ForegroundColor}"/> 
     <Setter Property="OverridesDefaultStyle" Value="true"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="MenuItem" > 
        <Grid> 
         <Border Name="Border" Height="25" 
         Background="{StaticResource BackgroundColor}"> 
          <ToggleButton Name="tbtnOpenPopup"> 
           <ToggleButton.Style> 
            <Style TargetType="ToggleButton"> 
             <Setter Property="OverridesDefaultStyle" Value="True"/> 
             <Setter Property="Template"> 
              <Setter.Value> 
               <ControlTemplate TargetType="ToggleButton"> 
                <Border Name="externalBorder" Background="Transparent" 
                 BorderThickness="0"> 
                 <ContentPresenter Content="{TemplateBinding Content}" 
                     HorizontalAlignment="Stretch" 
                     VerticalAlignment="Center"/> 
                </Border> 
                <ControlTemplate.Triggers> 
                 <Trigger Property="IsMouseOver" Value="true"> 
                  <Setter TargetName="externalBorder" Property = "Background" Value="{StaticResource DropDownHighlightedBackgroundColor}"/> 
                 </Trigger> 
                </ControlTemplate.Triggers> 
               </ControlTemplate> 
              </Setter.Value> 
             </Setter> 
            </Style> 
           </ToggleButton.Style> 
           <Grid> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition/> 
             <ColumnDefinition Width="7"/> 
            </Grid.ColumnDefinitions> 
            <ContentPresenter ContentSource="Header" VerticalAlignment="Center" 
                 Margin="10,0,0,0"/> 
            <Path Name="Arrow" Grid.Column="1" 
              Data="M0,3 L5,0 L0,-3 L0,3 Z" 
              Fill="{TemplateBinding Foreground}" 
              VerticalAlignment="Center"/> 
           </Grid> 
          </ToggleButton> 
         </Border> 
         <Popup Grid.ColumnSpan="2" 
          Name="Popup" 
          Placement="Right" 
          AllowsTransparency="True" 
          Focusable="False" 
          StaysOpen="True" 
          IsOpen="False" 
          PopupAnimation="None"> 
          <Grid Name="DropDown" 
          SnapsToDevicePixels="True"     
          MinWidth="{TemplateBinding ActualWidth}"> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition/> 
            <ColumnDefinition Width="22"/> 
           </Grid.ColumnDefinitions> 
           <Border MinHeight="25" Grid.ColumnSpan="2" 
            x:Name="DropDownBorder" 
            Background="{StaticResource DropDownBackgroundColor}" 
            BorderThickness="0"/> 
           <TextBlock Text="Some text" VerticalAlignment="Top" 
             HorizontalAlignment="Stretch"/> 
           <Button Name="closeButton" 
            Content="X" 
            Grid.Column="1" 
            VerticalAlignment="Top" 
            HorizontalAlignment="Right"/> 
          </Grid> 
         </Popup> 
        </Grid> 
        <ControlTemplate.Triggers> 
         <Trigger SourceName="tbtnOpenPopup" Property="IsChecked" Value="true"> 
          <Setter TargetName="Popup" Property="IsOpen" Value="true"/> 
          <Setter TargetName="Arrow" Property="Data" Value="M5,3 L0,0 L5,-3 L5,3 Z"/> 
         </Trigger> 
         <Trigger SourceName="closeButton" Property="IsPressed" Value="true"> 
          <Setter TargetName="tbtnOpenPopup" Property="IsChecked" Value="false"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

我希望在「closeButton」按下彈出的文本框,關閉和文本菜單,以保持打開。但是當「closeButton」按下ContextMenu關閉。

我不明白爲什麼它開心。

你有什麼想法嗎?

回答

0

一般來說,當焦點設置在別處時,上下文菜單將關閉。點擊你的ToggleButton就在ContextMenu中,所以沒關係 - 但是當你點擊關閉按鈕時,你會在ContextMenu之外單擊並關閉它。

(請記住,一個文本菜單是一個彈出,而不是所有者控制的可視化樹的一部分。)

0

用於實現自定義彈出基於上下文菜單,上下文菜單將關閉(即使這種類型的要求需要是StaysOpen是真的),在上下文菜單之外的其他東西獲得焦點(在你的情況下基於彈出式關閉按鈕)。

:(