2016-11-20 2 views
0

私はユーザーが新しいクラスを作成することができるやや複雑なメニュー項目を作成しようとしています。私が実行している問題は、(xceedツールキットから)数字の上下をクリックすると、メニュー項目が閉じ、プロパティーがStaysOpenOnClickがtrueに設定されていても閉じるということです。メニューサブメニュー項目を開いたままにするにはどうしたらいいですか?

ユーザーはそれを好まないでしょう。

、再現WPFプロジェクトを作成し、NuGetを通じて拡張WPF Toolkitを追加するには、その後、あなたのメイン・ウィンドウクラスに次のコードをドロップ:

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:local="clr-namespace:WhyDoesMyMenuItemCloseWhenClicked" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" 
    mc:Ignorable="d" 
    x:Class="WhyDoesMyMenuItemCloseWhenClicked.MainWindow" 
    Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="21"/> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 
     <Menu FontWeight="Bold"> 
      <MenuItem Header="_File"> 
       <MenuItem StaysOpenOnClick="True"> 
        <Grid Height="50" Width="50"> 
         <xctk:IntegerUpDown/> 
        </Grid> 
       </MenuItem> 
      </MenuItem> 
     </Menu> 
    </Grid> 
</Window> 

私はアップダウン整数のテキストフィールドをクリックし、メニューが閉じます。

なぜそれが起こっていますか?どうすればいいですかは起こりませんか?

+0

を達成することができます。メニュー以外の要素がフルキーボードキャプチャ/フォーカスを取得しているため、まったく異なる一連のイベントがトリガーされる可能性があります。 IsSubMenuOpenの変更を傍受して取り消したり元に戻したりしようとするかもしれませんが、その試みは容認できない動作になりました。それは実際には開いたままにしていましたが。 – Daniel

+0

他の何か、あなたはリソースにMenuItemのテンプレートを抽出し、あなたが制御する変数でこれを(ポップアップで)置き換えることができます:IsOpen = "{Binding IsSubmenuOpen、RelativeSource = {RelativeSource TemplatedParent}}" – Daniel

+0

メニューを開いたままにすると、容認できない動作になります。メニューのいくつかの部分は、テキストフィールドからフォーカスを強制的にリッピングしています。これは私が日曜日に調査したいと思う以上のものですが、私はあなたに幸運を祈っています。私は上記が何らかの形であなたを助けてくれることを願っています。 – Daniel

答えて

0

解決策を見つけました。それはひどくハックのある回避策のようなものですが、それはかなりうまくいきます。

MenuItemMenuItemに作成して変更しました。次に、サブMenuItemMenuItem.Headerプロパティ内でコントロールを定義し、そのMenuItemStaysOpenOnClickプロパティをtrueに設定します。

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:local="clr-namespace:WhyDoesMyMenuItemCloseWhenClicked" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" 
    mc:Ignorable="d" 
    x:Class="WhyDoesMyMenuItemCloseWhenClicked.MainWindow" 
    Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="21"/> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 
     <Menu FontWeight="Bold"> 
      <MenuItem Header="_File" StaysOpenOnClick="True"> 
       <MenuItem Header="_StaysOpenOnClick"> 
        <MenuItem StaysOpenOnClick="True"> 
         <MenuItem.Header> 
          <xctk:IntegerUpDown/> 
         </MenuItem.Header> 
        </MenuItem> 
       </MenuItem> 
      </MenuItem> 
     </Menu> 
    </Grid> 
</Window> 
-1

あなたはそこには、より多くのクリックするだけよりも起こっている、あなたがテキストフィールドを入力するとStaysOpenOnClickプロパティの使用は、この

+0

試してみてください。それは動作しません。メニュー項目のヘッダー内にコンテンツを作成し、そのメニュー項目を開いたままにしたいメニュー項目内に配置する必要があります。埋め込みメニュー項目のプロパティをTrueに設定すると、上記の私の答えに応じて、目的の効果が得られます。 – Will

関連する問題