如何从列表框中选择项目到上下文菜单

问题描述:

所以我知道那里有类似的问题,但我仍然困惑,希望有人能帮助我。我有一个列表框可以选择一个项目,它会添加一个属性。我现在有一个上下文菜单,因为布局正是我所需要的,但我努力使我的点击事件起作用,目前我不能对我的任何东西进行任何操作,但是我已经为列表中的代码添加了代码框工作,有人可以帮我在上下文菜单上的lsitbox点击事件的工作:)请问?如何从列表框中选择项目到上下文菜单

private void Selector_OnSelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     var listBox = sender as ListBox; 
     if (listBox.SelectedItems.Count == 0) 
     { 
      return; 
     } 
     var item = listBox.SelectedItems[0] as PropertyNode; 
     viewModel.AddPropertyNode(item); 
    } 

编辑

这是我的XAML,我有我的上下文菜单刚才

<DataTemplate x:Key="AddNodeTemplate"> 
     <Border BorderThickness="1" Background="#F7F7F7"> 
      <Border.BorderBrush> 
       <DrawingBrush Viewport="8,8,8,8" ViewportUnits="Absolute" TileMode="Tile"> 
        <DrawingBrush.Drawing> 
         <DrawingGroup> 
          <GeometryDrawing Brush="#F7F7F7"> 
           <GeometryDrawing.Geometry> 
            <GeometryGroup> 
             <RectangleGeometry Rect="0,0,50,50"/> 
             <RectangleGeometry Rect="50,50,50,50"/> 
            </GeometryGroup> 
           </GeometryDrawing.Geometry> 
          </GeometryDrawing> 
         </DrawingGroup> 
        </DrawingBrush.Drawing> 
       </DrawingBrush> 
      </Border.BorderBrush> 
      <StackPanel> 
       <Button x:Name="ButtonAdd" Click="ButtonAdd_Click" Height="30" Width="130" Tag="{Binding RelativeSource={RelativeSource AncestorType={x:Type syncfusion:Node}}}"> 
        <Button.Style> 
         <Style TargetType="Button"> 
          <Setter Property="Template"> 
           <Setter.Value> 
            <ControlTemplate TargetType="Button"> 
             <Grid Background="#F7F7F7"> 
              <Grid.ColumnDefinitions> 
               <ColumnDefinition Width="25"/> 
               <ColumnDefinition/> 
              </Grid.ColumnDefinitions> 
              <Image Source="Images/icon_plus.bmp" HorizontalAlignment="Left" Margin="5,0,0,0"/> 
              <TextBlock Text="Add Property" HorizontalAlignment="Center" Grid.Column="1" VerticalAlignment="Center" Foreground="LightGray" FontStyle="Italic" FontSize="12"/> 
             </Grid> 
            </ControlTemplate> 
           </Setter.Value> 
          </Setter> 
          <Setter Property="Background" Value="#F7F7F7"/> 
         </Style> 
        </Button.Style> 
        <Button.ContextMenu> 
         <ContextMenu> 
          <MenuItem Header="_Copy Existing" Icon="{StaticResource ImageCopy}" ItemsSource="{Binding Path=AvailableProperties}" Click="MenuItem_Click"> 
           <MenuItem.Resources> 
            <Style TargetType="MenuItem"> 
             <Style.Resources> 
              <Image x:Key="img" x:Shared="False" Width="12" Height="12" Source="{Binding Icon, Converter={StaticResource ImageToSourceConverter}}" 
                Margin="3" VerticalAlignment="Center"/> 
              <Style TargetType="ContentPresenter"> 
               <Style.Triggers> 
                <Trigger Property="ContentSource" Value="Icon"> 
                 <Setter Property="ContentTemplate"> 
                  <Setter.Value> 
                   <DataTemplate> 
                    <Image Source="{Binding}"/> 
                   </DataTemplate> 
                  </Setter.Value> 
                 </Setter> 
                </Trigger> 
               </Style.Triggers> 
              </Style> 
             </Style.Resources> 
             <Setter Property="Icon" Value="{Binding Icon, Converter={StaticResource ImageToSourceConverter}}"/> 
             <Style.Triggers> 
              <Trigger Property="Role" Value="SubMenuItem"> 
               <Setter Property="HeaderTemplate"> 
                <Setter.Value> 
                 <DataTemplate> 
                  <StackPanel Orientation="Horizontal"> 
                   <ContentPresenter Content="{Binding Name}"/> 
                  </StackPanel> 
                 </DataTemplate> 
                </Setter.Value> 
               </Setter> 
              </Trigger> 
             </Style.Triggers> 
            </Style> 
           </MenuItem.Resources> 
          </MenuItem> 
          <MenuItem Header="Upscale well logs"/> 
          <MenuItem Header="Upscale well_top attributes"/> 
          <MenuItem Header="Upscale point attributes" Icon="{StaticResource ImagePointSet}"> 
          </MenuItem> 
          <MenuItem Header="Calculate"/> 
         </ContextMenu> 
        </Button.ContextMenu> 
       </Button> 
     </StackPanel> 
     </Border> 
    </DataTemplate> 

代码背后的上下文菜单,我知道这是不是很多,但,这是因为尽我所能

private void MenuItem_Click(object sender, RoutedEventArgs e) 
    { 
     var menuItem = sender as MenuItem; 
    } 

电流输出

enter image description here

+0

您是否已将点击事件添加到上下文菜单项?如果您编辑上下文菜单并双击菜单项,它将添加事件处理程序,然后您只需将代码放在那里就像列表框一样。 –

+0

目前你的代码编译和运行?这里有一条规则,除非在具有相同Style的元素上设置事件,否则不能在Style范围中设置事件处理程序。 –

+0

是啊我的代码确实编译和运行相当开心我会告诉你我目前有什么 –

经过大量谷歌搜索和询问周围我找到了答案,我想我张贴的人谁可能有这个问题也是,只是它在我的问题的形式,这应该是很容易的编辑:)

<DataTemplate x:Key="AddNodeTemplate"> 
     <Border BorderThickness="1" Background="#F7F7F7"> 
      <Border.BorderBrush> 
       <DrawingBrush Viewport="8,8,8,8" ViewportUnits="Absolute" TileMode="Tile"> 
        <DrawingBrush.Drawing> 
         <DrawingGroup> 
          <GeometryDrawing Brush="#F7F7F7"> 
           <GeometryDrawing.Geometry> 
            <GeometryGroup> 
             <RectangleGeometry Rect="0,0,50,50"/> 
             <RectangleGeometry Rect="50,50,50,50"/> 
            </GeometryGroup> 
           </GeometryDrawing.Geometry> 
          </GeometryDrawing> 
         </DrawingGroup> 
        </DrawingBrush.Drawing> 
       </DrawingBrush> 
      </Border.BorderBrush> 
      <StackPanel> 
       <Button x:Name="ButtonAdd" Click="ButtonAdd_Click" Height="30" Width="130" Tag="{Binding RelativeSource={RelativeSource AncestorType={x:Type syncfusion:Node}}}"> 
        <Button.Style> 
         <Style TargetType="Button"> 
          <Setter Property="Template"> 
           <Setter.Value> 
            <ControlTemplate TargetType="Button"> 
             <Grid Background="#F7F7F7"> 
              <Grid.ColumnDefinitions> 
               <ColumnDefinition Width="25"/> 
               <ColumnDefinition/> 
              </Grid.ColumnDefinitions> 
              <Image Source="Images/icon_plus.bmp" HorizontalAlignment="Left" Margin="5,0,0,0"/> 
              <TextBlock Text="Add Property" HorizontalAlignment="Center" Grid.Column="1" VerticalAlignment="Center" Foreground="LightGray" FontStyle="Italic" FontSize="12"/> 
             </Grid> 
            </ControlTemplate> 
           </Setter.Value> 
          </Setter> 
          <Setter Property="Background" Value="#F7F7F7"/> 
         </Style> 
        </Button.Style> 
        <Button.ContextMenu> 
         <ContextMenu> 
          <MenuItem Header="Copy Exisiting" ItemsSource="{Binding Path=AvailableProperties}" Click="AddExistingProperty_OnClick" Icon="Images/Copy.bmp" FontFamily="MS Reference Sans Serif"> 
           <MenuItem.Resources> 
            <Style TargetType="MenuItem"> 
             <Style.Resources> 
              <Image x:Key="img" x:Shared="False" Width="10" Height="10" Source="{Binding Icon, Converter={StaticResource ImageToSourceConverter}}" 
                Margin="3" VerticalAlignment="Center"/> 
              <Style TargetType="ContentPresenter"> 
               <Style.Triggers> 
                <Trigger Property="ContentSource" Value="Icon"> 
                 <Setter Property="ContentTemplate"> 
                  <Setter.Value> 
                   <DataTemplate> 
                    <Image Source="{Binding}"/> 
                   </DataTemplate> 
                  </Setter.Value> 
                 </Setter> 
                </Trigger> 
               </Style.Triggers> 
              </Style> 
             </Style.Resources> 
             <Setter Property="Icon" Value="{Binding Icon, Converter={StaticResource ImageToSourceConverter}}"/> 
             <Style.Triggers> 
              <Trigger Property="Role" Value="SubMenuItem"> 
               <Setter Property="HeaderTemplate"> 
                <Setter.Value> 
                 <DataTemplate> 
                  <StackPanel Orientation="Horizontal"> 
                   <ContentPresenter Content="{Binding Name}"/> 
                  </StackPanel> 
                 </DataTemplate> 
                </Setter.Value> 
               </Setter> 
              </Trigger> 
             </Style.Triggers> 
            </Style> 
           </MenuItem.Resources> 
          </MenuItem> 
          <MenuItem Header="Upscale well logs" Click="AddProperty_OnClick" Tag="UpscaleWellLogs" Style="{StaticResource MenuItemIcon}" Icon="Images/WellLogs.png" FontFamily="MS Reference Sans Serif"/> 
          <MenuItem Header="Upscale well top attributes" Click="AddProperty_OnClick" Tag="UpscaleWellTopAttributes" Style="{StaticResource MenuItemIcon}" Icon="Images/WellTop.png" FontFamily="MS Reference Sans Serif"/> 
          <MenuItem Header="Upscale point attributes" Click="AddProperty_OnClick" Tag="UpscalePointAttributes" Style="{StaticResource MenuItemIcon}" Icon="Images/PointSet.png" FontFamily="MS Reference Sans Serif"/> 
          <MenuItem Header="Calculate" Click="AddProperty_OnClick" Tag="Calculate" Style="{StaticResource MenuItemIcon}" Icon="Images/calculator.png" FontFamily="MS Reference Sans Serif"/> 
         </ContextMenu> 
        </Button.ContextMenu> 
       </Button> 
     </StackPanel> 
     </Border> 
    </DataTemplate> 

private void AddExistingProperty_OnClick(object sender, RoutedEventArgs e) 
    { 
     var menuItem = e.OriginalSource as MenuItem; 
     var item = menuItem.DataContext as PropertyNode; 
     viewModel.AddPropertyNode(item); 
    } 

    private void AddProperty_OnClick(object sender, RoutedEventArgs e) 
    { 
     if (MenuItemActivated != null) 
     { 
      var menuItem = sender as MenuItem; 
      var command = menuItem.Tag as CognitiveTreeMenuCommand?; 
      if (command.HasValue) 
      { 
       MenuItemActivated(this, new MenuItemEventHandlerArgs() { Command = command.Value }); 
      } 
     } 
    } 

请确认您已正确连接你的代码在XAML。例如:

<ListView SelectionChanged="Selector_OnSelectionChanged"> 

我注意到我们没有看到任何wpf xaml代码。如果这不能回答你的问题,那么它可能会帮助你添加一个你的xaml的一瞥,所以我们可以确定你的Selector_OnSelectionChanged没有被处理。

谢谢!