Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将scrollviewer添加到上下文菜单_C#_Wpf_Contextmenu - Fatal编程技术网

C# 将scrollviewer添加到上下文菜单

C# 将scrollviewer添加到上下文菜单,c#,wpf,contextmenu,C#,Wpf,Contextmenu,我想在我的contextMenu中添加一个scrollviewer,因为我可以有很多(30-40)子项 因此,我在子菜单头模板中添加了scrollviewer: <ControlTemplate x:Key="{x:Static MenuItem.SubmenuHeaderTemplateKey}" TargetType="MenuItem"> <Border Name="Border" BorderBrush="Pink"

我想在我的contextMenu中添加一个scrollviewer,因为我可以有很多(30-40)子项

因此,我在子菜单头模板中添加了scrollviewer:

<ControlTemplate 
  x:Key="{x:Static MenuItem.SubmenuHeaderTemplateKey}" 
  TargetType="MenuItem">
        <Border Name="Border" 
          BorderBrush="Pink"
          Background="Transparent"
           Cursor="Hand">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" SharedSizeGroup="Icon"/>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="Auto" SharedSizeGroup="Shortcut"/>
                    <ColumnDefinition Width="13"/>
                </Grid.ColumnDefinitions>
                <ContentPresenter 
        Name="Icon"
        Margin="6,0,6,0"
        VerticalAlignment="Center"
        ContentSource="Icon"/>
                <ContentPresenter 
        Name="HeaderHost"
        Grid.Column="1"
        ContentSource="Header"
        RecognizesAccessKey="True"/>
                <TextBlock x:Name="InputGestureText"
        Grid.Column="2"
        Text="{TemplateBinding InputGestureText}"
        Foreground="{StaticResource CouleurTexteBouton}"
        Margin="5,2,2,2"
        DockPanel.Dock="Right"/>
                <Path 
        Grid.Column="3"
        Name="CheckMark"
        HorizontalAlignment="Center"
        VerticalAlignment="Center"
        Data="M 0 0 L 0 7 L 4 3.5 Z" 
        Fill="{StaticResource CouleurTexteBouton}" />
                <Popup 
        Name="Popup"
        Placement="Right"
        HorizontalOffset="10" 
        IsOpen="{TemplateBinding IsSubmenuOpen}"
        AllowsTransparency="True" 
        Focusable="False"
        PopupAnimation="Fade">
                    <Border 
          Name="SubmenuBorder"
          SnapsToDevicePixels="True"
          Style="{StaticResource StyleBlocsPopUpWithBorder}"
          TextBlock.Foreground="{StaticResource CouleurTexteBouton}">
                        <ScrollViewer Style="{StaticResource FavsScrollViewer}" VerticalScrollBarVisibility="Auto" Margin="0,5" MaxHeight="400">
                        <StackPanel  
            IsItemsHost="True" 
            KeyboardNavigation.DirectionalNavigation="Cycle" />
                        </ScrollViewer>
                    </Border>
                </Popup>
            </Grid>
        </Border>
    </ControlTemplate>

scrollviewer工作正常,但是如果父级有滚动条,则每个级别之间的水平偏移不再工作(我的级别0只有7个项目,因此没有任何滚动条,因此子项目的水平偏移工作正常。但是正如您在屏幕中看到的那样(左区是级别1=我的级别0的子项,右区是子项的级别2,由于滚动条,水平偏移不起作用

我怎样才能解决这个问题

以下是我的上下文菜单的完整模板/样式:

    <Style x:Key="MenuItemStyle" TargetType="MenuItem">
            <Setter Property="OverridesDefaultStyle" Value="True"/>
            <Setter Property="Background" Value="Transparent" />
            <Style.Triggers>
                <Trigger Property="Role" Value="TopLevelHeader">
                    <Setter Property="Template"
                  Value="{StaticResource {x:Static MenuItem.TopLevelHeaderTemplateKey}}"/>
                    <Setter Property="Grid.IsSharedSizeScope" Value="true"/>
                </Trigger>
                <Trigger Property="Role" Value="TopLevelItem">
                    <Setter Property="Template"
                  Value="{StaticResource {x:Static MenuItem.TopLevelItemTemplateKey}}"/>
                </Trigger>
                <Trigger Property="Role" Value="SubmenuHeader">
                    <Setter Property="Template"
                  Value="{StaticResource {x:Static MenuItem.SubmenuHeaderTemplateKey}}"/>
                </Trigger>
                <Trigger Property="Role" Value="SubmenuItem">
                    <Setter Property="Template"
                  Value="{StaticResource {x:Static MenuItem.SubmenuItemTemplateKey}}"/>
                </Trigger>
            </Style.Triggers>
        </Style>
<Style x:Key="StyleContext" TargetType="ContextMenu">
        <Setter Property="SnapsToDevicePixels" Value="True"/>
        <Setter Property="OverridesDefaultStyle" Value="True"/>
        <Setter Property="Grid.IsSharedSizeScope" Value="true"/>
        <Setter Property="HasDropShadow" Value="True"/>
        <Setter Property="VerticalOffset" Value="10" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ContextMenu">
                    <Border 
                        Name="Border"
                        Width="Auto" >
                        <StackPanel IsItemsHost="True"
                      KeyboardNavigation.DirectionalNavigation="Cycle"/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    <Style x:Key="{x:Static MenuItem.SeparatorStyleKey}"
       TargetType="Separator">
        <Setter Property="Height" Value="1"/>
        <Setter Property="Margin" Value="0,4,0,4"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Separator">
                    <Border BorderBrush="Green"
                BorderThickness="1"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    <!-- TopLevelHeader -->
    <ControlTemplate x:Key="{x:Static MenuItem.TopLevelHeaderTemplateKey}"
                 TargetType="MenuItem">
        <Border Name="Border"  Cursor="Hand">
            <Grid>
                <ContentPresenter 
        Margin="6,3,6,3" 
                    Name="HeaderHost"
        ContentSource="Header"
        RecognizesAccessKey="True" 
                     />
                <Popup 
        Name="Popup"
        Placement="Bottom"
        IsOpen="{TemplateBinding IsSubmenuOpen}"
        AllowsTransparency="True" 
        Focusable="False"
        PopupAnimation="Fade">
                    <Border 
          Name="SubmenuBorder"
          SnapsToDevicePixels="True"
          Background="Blue"
          BorderBrush="Yellow"
          BorderThickness="2" >
                        <StackPanel  
            IsItemsHost="True" 
            KeyboardNavigation.DirectionalNavigation="Cycle" />
                    </Border>
                </Popup>
            </Grid>
        </Border>
    </ControlTemplate>
    <!-- TopLevelItem -->
    <ControlTemplate 
  x:Key="{x:Static MenuItem.TopLevelItemTemplateKey}" 
  TargetType="MenuItem">
        <Border Name="Border" Cursor="Hand" >
            <Grid>
                <ContentPresenter        
        Margin="6,3,6,3" 
        ContentSource="Header"
                    Name="content_text"
        RecognizesAccessKey="True" />
            </Grid>
        </Border>
    </ControlTemplate>
    <!-- SubmenuItem 
    -->
    <ControlTemplate 
        x:Key="{x:Static MenuItem.SubmenuItemTemplateKey}"
        TargetType="MenuItem"
        >
        <Border 
            Name="Border"
          BorderBrush="Transparent"
          Background="Transparent"
          BorderThickness="0" Cursor="Hand">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" SharedSizeGroup="Icon"/>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="Auto" SharedSizeGroup="Shortcut"/>
                    <ColumnDefinition Width="13"/>
                </Grid.ColumnDefinitions>
                <ContentPresenter 
        Name="Icon"
        Margin="6,0,6,0"
        VerticalAlignment="Center"
        ContentSource="Icon"/>
                <Border 
        Name="Check"  
        Width="13" Height="13" 
        Visibility="Collapsed"
        Margin="6,0,6,0" 
        Background="Transparent"
        BorderThickness="0"
        BorderBrush="Transparent">
                    <Path 
          Name="CheckMark"
          Width="7" Height="7" 
          Visibility="Hidden" 
          SnapsToDevicePixels="False" 
          StrokeThickness="2"
          Data="M 0 0 L 7 7 M 0 7 L 7 0" />
                </Border>
                <ContentPresenter 
        Name="HeaderHost"
        Grid.Column="1"
        ContentSource="Header"
        RecognizesAccessKey="True"/>
                <TextBlock x:Name="InputGestureText"
        Grid.Column="2"
        Text="{TemplateBinding InputGestureText}"
        Margin="5,2,0,2"
        DockPanel.Dock="Right" />
            </Grid>
        </Border>
    </ControlTemplate>


谢谢

可能是一个解决方案,在主边框的子菜单HeaderTemplateKey的模板上使用边距。它似乎不起作用。有没有办法保持contextmenu打开?如果有,我可以尝试更改“每一个”使用SnoopYou可以尝试StayOpen属性。看看这个:我发现horizontalOffset可以用作边距(边距值被忽略了?),但是我需要根据父scrollviewer设置我的horizontalOffset(如果没有显示),我可以使用转换器,但我不知道如何找到父scrollviewer是否可见?