2016-08-29 10 views
0

条件に基づいてルートMenuItemCollapsedが必要です。ルートメニューではなく、折りたたまれたメニュー項目のサブメニュー項目を取得できます。ルートメニュー項目可視性バインディング

背景:設定に基づいて、私はMenuItemsVisibleまたはCollapsedにする必要があります。この種の作品。サブMenuItemでは完全に動作します。真と偽の間MySettingの値を変更する

<Menu> 
    <MenuItem Header="Root Menu Item" > 
     <MenuItem.Style> 
      <Style TargetType="{x:Type MenuItem}" > 
       <Setter Property="Visibility" Value="Visible" /> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding Source={StaticResource MyResource}, Path=MySetting, UpdateSourceTrigger=PropertyChanged}" Value="False"> 
         <Setter Property="Visibility" Value="Collapsed" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </MenuItem.Style> 
     <MenuItem Header="Sub Menu Item"> 
      <MenuItem.Style> 
       <Style TargetType="{x:Type MenuItem}" > 
        <Setter Property="Visibility" Value="Collapsed" /> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding Source={StaticResource MyResource}, Path=MySetting, UpdateSourceTrigger=PropertyChanged}" Value="False"> 
          <Setter Property="Visibility" Value="Collapsed" /> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </MenuItem.Style> 
     </MenuItem> 
    </MenuItem> 
</Menu> 

は、「サブメニュー項目」が消えたり現れになりますが、ルートメニュー項目には影響しません。なぜ私は迷っています。

+1

なぜあなたはちょうどBoolenToVisbilityConverterを使用していませんか? {プロパティの可視性= "{Binidng Path = MySetting、Source = {StaticResource MyResource}、コンバーター= {StaticResource BoolToVisConverter}}" /> –

+1

それはそれを修正しました。これを回答として投稿すると、これを正解とマークします – Xaphann

答えて

1

この単純なバインディングでは、IValueConverterを使用する方が簡単です。事前にBooleanToVisibilityConverterが含まれています。

使用例:

<SomeParentElement.Resources> 
    <BooleanToVisibilityConverter x:Key="BoolToVisConverter" /> 
</SomeParentElement.Resources> 

<Menu Visibility="{Binding Path=MySetting, 
          Source={StaticResource MyResource}, 
          Converter={StaticResource BoolToVisConverter}}" /> 
関連する問題