wpf - 在 TabControl.ContentTemplate 中定义时,如何将 MouseEventArgs.Source 作为 TextBox
问题描述
我prism
InvokeCommandAction
用来绑定Window.PreviewMouseDown
到MainWindowViewModel
. 然后我有一个TabControl
whoItemsSource
与 anObservableCollection<ItemViewModel>
和 theTabControl.ContentTemplate
有界ItemViewModel.ItemContent
。
问题是当ItemViewModel.ItemContent
is/has a TextBox
and 被点击时, theMouseEventArgs.Source
是TabControl
.
我希望MouseEventArgs.Source
成为TextBox
当我绑定到 aContentControl.Content
外部时会发生的情况TabControl.ContentTemplate
。
以下是复制代码:
主窗口.xaml
<Window
x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:local="clr-namespace:WpfApp1"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:prism="http://prismlibrary.com/"
Title="MainWindow"
Width="800"
Height="450"
mc:Ignorable="d">
<Window.DataContext>
<local:MainWindowViewModel />
</Window.DataContext>
<i:Interaction.Triggers>
<i:EventTrigger EventName="PreviewMouseDown">
<prism:InvokeCommandAction Command="{Binding PreviewMouseDownCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
<StackPanel>
<ContentControl Content="{Binding SingleItemContent}" />
<TabControl ItemsSource="{Binding ItemViewModels}">
<TabControl.ContentTemplate>
<DataTemplate>
<ContentControl Content="{Binding ItemContent}" />
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
</StackPanel>
</Window>
MainWindowViewModel.cs
using Prism.Commands;
using Prism.Mvvm;
using System.Collections.ObjectModel;
using System.Windows.Controls;
using System.Windows.Input;
namespace WpfApp1
{
public class MainWindowViewModel : BindableBase
{
public MainWindowViewModel()
{
PreviewMouseDownCommand = new DelegateCommand<MouseEventArgs>(PreviewMouseDown);
PopulateItems();
}
public ICommand PreviewMouseDownCommand { get; }
private void PreviewMouseDown(MouseEventArgs e)
{
/// if SingleItemContent is clicked
/// e.Source is TextBox
/// if an ItemViewModel.ItemContent is clicked
/// e.Source is TabControl
}
private void PopulateItems()
{
ItemViewModels.Add(new ItemViewModel
{
ItemContent = new TextBox()
});
SingleItemContent = new TextBox();
}
public ObservableCollection<ItemViewModel> ItemViewModels { get; } = new ObservableCollection<ItemViewModel>();
public object SingleItemContent { get; set; }
}
public class ItemViewModel
{
public object ItemContent { get; set; }
}
}
解决方案
推荐阅读
- python - 将熊猫升级到 1.03 后,熊猫因空数据框而失败是错误还是功能?(TypeError:无法使用 dtyped 执行“rand_”)
- amazon-web-services - 卓:是否可以检索存储在 KMS 中的密钥内容?
- pointers - Fortran 指针的深拷贝
- java - 有没有办法在 Junit5 中批量断言?
- javascript - 使用 Javascript(Web 应用程序)创建每周计划
- python - 如何在odoo中为curency_id字段设置域?
- javascript - 状态 react-native 导致的无限循环
- java - JPQL 用于查找用户是否已发送或收到其他用户的好友请求
- tensorflow - 当 predict_generator 在多类分类问题的同一数据集上工作时,为什么 keras predict_classes 会失败?
- .net - 如何将 system.commandline 设置为不区分大小写