首页 > 解决方案 > 从 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 属性?

标签: wpf

解决方案


我知道了。我很接近翻译。要将对象翻译/类型转换为您正在使用的对象,我需要使用以下行:

StackPanel objIn = (StackPanel)(e.Data.GetData(typeof(StackPanel)));

这与上面略有不同。


推荐阅读