[英]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.