0

ユーザーがツリー ビューの要素を右クリックしたときに表示されるコンテキスト メニューを作成するにはどうすればよいですか?

クリックされたアイテムの名前を取得したいのですが、どうすれば可能ですか?

これは私のツリービューです:

<TreeView Name="tvwResultados" 
                  MouseMove="DataGrid_MouseMove"
                  MouseLeftButtonDown="DataGrid_PreviewMouseLeftButtonDown"
                  ItemTemplate="{StaticResource empresaTemplate}"
                  ItemsSource="{Binding Empresas}"
                  Padding="0,6,0,6"
                  Background="Black"
                  BorderBrush="Gray"
                  BorderThickness="1">
            <TreeView.ItemContainerStyle>
                <Style TargetType="{x:Type TreeViewItem}">
                    <Setter Property="BorderThickness" Value="1" />
                    <Setter Property="Padding" Value="4,2,4,2" />
                    <Style.Triggers>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter Property="BorderBrush" Value="Gray" />
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </TreeView.ItemContainerStyle>
            <TreeView.Resources>
                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#171717" />
                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Silver" />
                <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#333333" />
                <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Silver" />
                <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="Gray" />
                <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}" Color="Silver" />
            </TreeView.Resources>
        </TreeView>
4

2 に答える 2

1

さらに簡単に... ツールボックスから ContextMenuStrip をデザイン ビューに追加します。必要に応じてメニュー オプションを追加します (必要に応じて名前を変更するか、ContextMenuStrip1.

于 2013-07-14T18:28:39.767 に答える
1

多くの要因に応じて、ContextMenuに を追加する方法がいくつかあります。TreeViewItemsたとえば、ContextMenuそれぞれ同じTreeViewItemですか?はどこMenuItemsから来たのですか?

1 つの解決策は、 に を追加するContextMenuことItemContainerStyleです。トップレベルのコントロールが次のようになっている場合はContextMenu、リソースとして定義できます。Window

<Window.Resources>
    <ContextMenu x:Key="TreeItemMenu">
        <MenuItem Header="Menu Item 1" Click="MenuItem_Click_1"/>
        <MenuItem Header="Menu Item 2" Click="MenuItem_Click_2"/>
    </ContextMenu>
</Window.Resources>

そして、これを次のようItemContainerStyleに使用するように更新できます。ContextMenu

<TreeView.ItemContainerStyle>
    <Style TargetType="{x:Type TreeViewItem}">
        <Setter Property="BorderThickness" Value="1" />
        <Setter Property="Padding" Value="4,2,4,2" />
        <Setter Property="ContextMenu" Value="{DynamicResource TreeItemMenu}"/>
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="BorderBrush" Value="Gray" />
            </Trigger>
        </Style.Triggers>
    </Style>
</TreeView.ItemContainerStyle>

クリックされたアイテムを取得するには、それを個別に処理する必要があります。を使用しEventSetterて、それぞれにイベントを添付し、TreeViewItem次のように最後にクリックされた項目を追跡できます。

これをスタイルのセッターに追加します。

<EventSetter Event="MouseRightButtonDown" Handler="OnTreeItemClicked"/>

そして、これはコードビハインドに入ります:

private void OnTreeItemClicked(object sender, MouseButtonEventArgs e)
{
    _item = sender as TreeViewItem;
    if (_item != null)
    {
        string header = _item.Header.ToString();
    }
}

ContextMenuこれにより、各に同じものが追加され、TreeViewItemがハードコーディングMenuItemsされますが、 を追加する方法を示していますContextMenu。確かに、より柔軟/動的/高度になることができますが、これは始めるための基盤を提供するはずです.

于 2013-03-06T18:23:04.067 に答える