简体   繁体   English

WinUI 3 TreeView 项目上下文浮出控件

[英]WinUI 3 TreeView Item Context Flyout

I have TreeView with binded collection.我有带绑定集合的 TreeView。 How can I get object from TreeViewItem Context Flyout with Button in this Flyout by Click event?如何在此 Flyout by Click 事件中使用 Button 从 TreeViewItem Context Flyout 获取对象? Can't use selected item because right clicking don't set item as selected.无法使用选定的项目,因为右键单击不会将项目设置为选定。 Thanks, I'm new with WinUI 3. Here's my code:谢谢,我是 WinUI 3 的新手。这是我的代码:

<DataTemplate x:Key="TreeViewPalleteItemTemplate" x:DataType="local:PalleteItem">
            <TreeViewItem>
                <TreeViewItem.ContextFlyout>
                    <Flyout Placement="BottomEdgeAlignedLeft">
                        <StackPanel Orientation="Horizontal">
                            <Button Width="60" Height="60" Click="DeletePalleteItem_Click">
                                <SymbolIcon Symbol="Delete"/>
                            </Button>
                            <Button Width="60" Height="60">
                                <SymbolIcon Symbol="Setting"/>
                            </Button>
                        </StackPanel>
                    </Flyout>
                </TreeViewItem.ContextFlyout>
                <StackPanel Orientation="Vertical">
                    <StackPanel Orientation="Horizontal">
                        <Image Source="Graphics/part.png" Margin="0,0,5,0" Stretch="Uniform" MaxHeight="20"/>
                        <TextBlock Text="{Binding Item.DrawingNumber}" FontSize="18" />
                        <TextBlock Text=" - " FontSize="18" />
                        <TextBlock Text="{Binding Item.DrawingName}" FontSize="18" />
                    </StackPanel>
                    <StackPanel Orientation="Horizontal" Margin="30,0,0,0">
                        <TextBlock Text="{Binding EmployeeName}"  FontSize="16"/>
                        <TextBlock Text=" - ("  FontSize="16"/>
                        <TextBlock Text="{Binding CountString}"  FontSize="16"/>
                        <TextBlock Text=")"  FontSize="16"/>
                    </StackPanel>
                </StackPanel>
            </TreeViewItem>
        </DataTemplate>
private void DeletePalleteItem_Click(object sender, RoutedEventArgs e)
{
      here get clicked object (PalleteItem).....
}

OK.好的。 finally I get solution by adding RightTapped event and set TreeViewItem as selected.最后我通过添加 RightTapped 事件并将 TreeViewItem 设置为选中来获得解决方案。 But is there another (better) solution to get object?但是是否有另一种(更好的)解决方案来获取对象?

private void TreeViewItem_RightTapped(object sender, RightTappedRoutedEventArgs e)
    {
        if (sender is TreeViewItem item)
        {
            item.IsSelected = true;
        }
    }

This is another option:这是另一种选择:

<Grid>
    <TreeView
        x:Name="TreeViewControl"
        ItemsSource="{x:Bind Items}">
        <TreeView.ItemTemplate>
            <DataTemplate x:DataType="local:Item">
                <TreeViewItem Content="{x:Bind Id}">
                    <TreeViewItem.ContextFlyout>
                        <Flyout>
                            <Button
                                Click="Button_Click"
                                Content="Click" />
                        </Flyout>
                    </TreeViewItem.ContextFlyout>
                </TreeViewItem>
            </DataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>
</Grid>
public class Item
{
    public string Id { get; set; } = string.Empty;
}

public sealed partial class MainWindow : Window
{
    public MainWindow()
    {
        this.InitializeComponent();
    }

    public ObservableCollection<Item> Items { get; } = new()
    {
        new Item() { Id = "A" },
        new Item() { Id = "B" },
        new Item() { Id = "C" },
    };

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        if (sender is Button button &&
            button.DataContext is Item item)
        {
            // Do something here...
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM