2010-09-09 9 views
7

Mam MenuItem, który dynamicznie tworzy elementy podmenu z ItemsSource -property.Styl optyczny WPF dynamicznie tworzone MenuItem-Separator w MVVM

Do grupowania mam w menu separatory. Separator jest tworzony dla każdej pozycji zerowej w kolekcji ItemsSource przez ControlTemplate z MenuItem.ItemContainerStyle.

Działa to dobrze, jednak ma separator nie taki sam styl optyczny, jak inne separatory, które są umieszczone w kolekcji Items w menu.

Czy istnieje sposób zmiany wyglądu separatora tak, aby wyglądał na "normalny" element menu-separatory?

Oto kod używam:

<MenuItem.ItemContainerStyle> 
    <Style TargetType="MenuItem"> 
    <Setter Property="Header" Value="{Binding Title}"/> 
    <Setter Property="Command" Value="{Binding Command}"/> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding }" Value="{x:Null}"> 
      <Setter Property="Template" > 
       <Setter.Value> 
        <ControlTemplate> 
         <Separator /> <!-- THIS SEPARATOR IS NOT SHOWN AS COMMON MENUITEM-SEPARATORS ARE --> 
        </ControlTemplate>           
       </Setter.Value> 
      </Setter> 
     </DataTrigger>        
    </Style.Triggers> 
    </Style> 
</MenuItem.ItemContainerStyle> 

Odpowiedz

15

Jest to styl, który jest zadeklarowany w System.Resources z MenuItem.SeparatorStyleKey jako klucz. Rodzic MenuItem normalnie ustawia styl na dzieci w separatorze typu, ale ponieważ twój jest MenuItem, to nie będzie, więc trzeba będzie to zrobić ręcznie:

<Separator Style="{StaticResource {x:Static MenuItem.SeparatorStyleKey}}" /> 

Można też czytać bloga Bea Stollnitz za wpis "How do I insert Separator objects in a data bound MenuItem?" dla innego podejścia.

0

Spróbuj owijania SEPERATOR w MENUITEM

<ControlTemplate> 
    <MenuItem> 
    <MenuItem.Header> 
     <Separator /> 
    </MenuItem.Header> 
    </MenuItem> 
</ControlTemplate> 
+0

Dzięki za odpowiedź. To dobry pomysł, ale niestety nie pomaga. Separator wygląda na równy, ale jako element podrzędny ma dodatkowo MenuItem, który można wybrać (co powoduje, że separator można wybrać na końcu, jeśli nie jest wyłączony). – HCL