Создание прозрачного меню WPF и подменю - PullRequest
2 голосов
/ 12 января 2012

Я ухожу из этого замечательного примера, который я нашел, он работает, но когда у меня есть ветка подменю от одного из пунктов меню, стиль не отображается в этом подменю.

WPF Прозрачное меню

Я попытался скопировать то, что установлено для MenuItem.TopLevelHeaderTemplateKey ниже, в качестве другого ControlTemplate, нацеленного на MenuItem.SubmenuHeaderTemplateKey, это работает некоторым образом, но корень подменю не находится в той же позиции, что и другие элементы меню, которые не подменю.

Можно ли как-то отредактировать ControlTemplate, который сообщает каждому элементу меню, является ли корень или дочерний элемент одинаковыми и действуют?

ETA: Вот мой рабочий xaml, элементы меню, в которых есть элементы, перемещаются влево. Я не могу понять, почему.

 <ControlTemplate x:Key="{x:Static MenuItem.TopLevelHeaderTemplateKey}" TargetType="{x:Type MenuItem}">
  <Border Name="Border" >
    <Grid>
     <ContentPresenter 
        Margin="6,3,6,3" 
        ContentSource="Header"                            
        RecognizesAccessKey="True" />
     <Popup 
      Name="Popup"
      Placement="Bottom"
      IsOpen="{TemplateBinding IsSubmenuOpen}"
      AllowsTransparency="True" 
      Focusable="False"                           
      PopupAnimation="Fade">
       <Border 
        Name="SubmenuBorder"
        SnapsToDevicePixels="True"

        Background="#9B000000">
                            <StackPanel  
          IsItemsHost="True" 
          KeyboardNavigation.DirectionalNavigation="Cycle" />
        </Border>
     </Popup>
   </Grid>
  </Border>
            <ControlTemplate.Triggers>
                <Trigger Property="IsSuspendingPopupAnimation" Value="true">
                    <Setter TargetName="Popup" Property="PopupAnimation" Value="None"/>
                </Trigger>
                <Trigger Property="IsHighlighted" Value="true">
                    <Setter TargetName="Border" Property="Background" Value="#C0C0C0"/>
                    <Setter TargetName="Border" Property="BorderBrush" Value="Transparent"/>
                </Trigger>
                <Trigger SourceName="Popup" Property="Popup.AllowsTransparency" Value="True">
                    <Setter TargetName="SubmenuBorder" Property="CornerRadius" Value="0,0,4,4"/>
                    <Setter TargetName="SubmenuBorder" Property="Padding" Value="0,0,0,3"/>
                </Trigger>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Foreground" Value="#888888"/>
                </Trigger>
            </ControlTemplate.Triggers>
    </ControlTemplate>

        <ControlTemplate x:Key="{x:Static MenuItem.SubmenuHeaderTemplateKey}" TargetType="{x:Type MenuItem}">
            <Border Name="Border" >
                <Grid>
      <ContentPresenter 
        Margin="6,3,6,3" 
        ContentSource="Header"                            
        RecognizesAccessKey="True" />
                    <Popup 
      Name="Popup"
      Placement="Right"
      IsOpen="{TemplateBinding IsSubmenuOpen}"
      AllowsTransparency="True" 
      Focusable="False"                           
      PopupAnimation="Fade">
                        <Border 
        Name="SubmenuBorder"
        SnapsToDevicePixels="True"
        Background="#9B000000">
                            <StackPanel  
          IsItemsHost="True" 
          KeyboardNavigation.DirectionalNavigation="Cycle" />
                        </Border>
                    </Popup>
                </Grid>
            </Border>
            <ControlTemplate.Triggers>
                <Trigger Property="IsSuspendingPopupAnimation" Value="true">
                    <Setter TargetName="Popup" Property="PopupAnimation" Value="None"/>
                </Trigger>
                <Trigger Property="IsHighlighted" Value="true">
                    <Setter TargetName="Border" Property="Background" Value="#C0C0C0"/>
                    <Setter TargetName="Border" Property="BorderBrush" Value="Transparent"/>
                </Trigger>
                <Trigger SourceName="Popup" Property="Popup.AllowsTransparency" Value="True">
                    <Setter TargetName="SubmenuBorder" Property="CornerRadius" Value="0,0,4,4"/>
                    <Setter TargetName="SubmenuBorder" Property="Padding" Value="0,0,0,3"/>
                </Trigger>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Foreground" Value="#888888"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>

Ответы [ 2 ]

0 голосов
/ 12 января 2012
0 голосов
/ 12 января 2012

Я бы порекомендовал вам начать с полного примера шаблона MenuItem и поработать над его изменением, чтобы сделать его полупрозрачным. Вы можете найти полный пример кода MenuItem на веб-сайте msdn здесь: http://msdn.microsoft.com/en-us/library/ms747082(v=VS.90).aspx

Этот код включает в себя отдельный шаблон для заголовка верхнего уровня, элемента верхнего уровня, заголовка подменю и элемента подменю. Затем он включает все шаблоны в стиле MenuItem с использованием триггеров.

Я думаю, что код, который вас больше всего заинтересует, это шаблон заголовка подменю. Просмотрите этот код, чтобы понять, как сделать так, чтобы корень подменю выглядел так же, как элементы меню, у которых нет подменю. Дайте мне знать, если у вас все еще проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...