2011-09-15 1 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が」押されたときに閉じるように、とのContextMenuをしたいです。しかし、 "closeButton"が押されるとContextMenuが閉じられます。

なぜそれが起こっているのか理解できませんでした。

ご意見はありますか?

答えて

0

一般に、フォーカスが他の場所に設定されると、コンテキストメニューが閉じます。 ToggleButtonをクリックするとContextMenu内に表示されます。これは問題ありませんが、閉じるボタンをクリックするとContextMenuの外をクリックして閉じます。

(のContextMenuは、所有者のコントロールのビジュアルツリーの一部ポップアップではなく、ということを覚えておいてください。)

要件のこのタイプは、コンテキストメニューが閉じますようにも(カスタムポップアップ基づいて、コンテキストメニューを実装するために呼び出す
0

コンテキストメニューの外にある何かがフォーカスを取得した後(ポップアップベースの閉じるボタン)

:(