wpf - 从 Drop 事件中捕获 StackPanel 的名称
问题描述
在 WPF 中,我有以下 XAML 代码:
<Page x:Class="com.MyCo.MyProj.Pages.Configuration.ManageLinkage.MasterLinkage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:com.MyCo.MyProj.Pages.Configuration.ManageLinkage"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Title="MasterLinkage">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<TabControl TabStripPlacement="Top" Background="Transparent">
<TabItem Header="Import">
<ListBox Margin="0,5,0,0" Name="lbxImportItems" HorizontalAlignment="Left" VerticalAlignment="Top" Width="110" Background="Transparent"
PreviewMouseLeftButtonDown="lbxImportItems_PreviewMouseLeftButtonDown" >
<StackPanel Orientation="Vertical" HorizontalAlignment="Center" Name="DBImport">
<Image Source="/Images/DBImport25px.png" VerticalAlignment="Center" HorizontalAlignment="Center"></Image>
<TextBlock Text="Database" Foreground="AntiqueWhite"/>
</StackPanel>
<StackPanel Orientation="Vertical" Name="CSVImport">
<Image Source="/Images/CSVImport25px.png" VerticalAlignment="Center" HorizontalAlignment="Center"></Image>
<TextBlock Text="CSV Import" Foreground="AntiqueWhite"/>
</StackPanel>
</ListBox>
</TabItem>
</TabControl>
<Canvas x:Name="cnvsLinkScreen" AllowDrop="True" Grid.Column="1" Background="Transparent" Drop="cnvsLinkScreen_Drop" DragOver="cnvsLinkScreen_DragOver" ></Canvas>
</Grid>
捕获事件的代码在这里:
private void cnvsLinkScreen_Drop(object sender, DragEventArgs e)
{
Canvas parent = (Canvas)sender;
object data = e.Data.GetData(typeof(string));
StackPanel objIn = (StackPanel)e.Data;
...
}
拖放效果很好,事件方法在画布中创建了图像。但是,我想从被丢弃的 StackPanels 中捕获 Name="" 。
我发现名称埋在“DragEventArgs e”对象的超深。我认为应该有一种方法将对象(或该对象中的对象)转换为 StackPanel 以轻松使用它。上面的代码不会转换 StackPanel 对象(它不在根对象或子对象;我都试过了)所以它在“StackPanel objIn = (StackPanel)e.data;”上出现异常
如何将传入对象转换为 StackPanel,或者如何从 Stackpanel 访问 Name 属性?
解决方案
我知道了。我很接近翻译。要将对象翻译/类型转换为您正在使用的对象,我需要使用以下行:
StackPanel objIn = (StackPanel)(e.Data.GetData(typeof(StackPanel)));
这与上面略有不同。
推荐阅读
- shell - 使用文件夹和文件大小递归列出文件
- javafx - javafx label message showing with timer does not work
- mysql - 如何将每条记录与另一条记录进行比较(名称反转问题)并删除重复记录?
- httphandler - Spring Boot2 Undertow 相同站点 - HttpHandler 自定义 - 需要帮助
- python-poetry - Python Poetry 与 scikit-umfpack 明显不兼容
- android - 与 kotlin 异步运行代码的最佳方式
- excel - 在 Powerpoint 上对齐图片
- php - 为 Woocommerce 中的特定支付网关添加百分比和固定成本的自定义费用
- c# - 为什么它不拿起任何相机?
- git - 理解 git 冲突