WPF ListViewItem拖放到TextBlock

时间:2015-09-13 01:18:47

标签: c# wpf xaml drag-and-drop

我正在WPF中编写一个简单的地址簿示例应用程序,其中我有listview将联系人保存为用户对象,但每个项目都用TextBlock表示,仅显示名称。

我想要实现的是用户可以将项目拖到“组”上。组显示在窗口的左侧。它是一个包含多个TextBlock项的简单网格列。

我的相关代码隐藏:

    /** Display Contact in the contact pane**/
    private void lstItemContact_MouseDown(object sender, MouseButtonEventArgs e)
    {

        ListViewItem item = (ListViewItem)sender;

        User selectedUser = (User) item.Content;

        DragDrop.DoDragDrop(lstContacts, item, DragDropEffects.Move);

        contactPane.Fullname = selectedUser.Name;
        contactPane.Email = selectedUser.Mail;
    }

    private void tbFavouritesDrop_Drop(object sender, DragEventArgs e)
    {
        User dropped_user = (User)sender;

        MessageBox.Show(dropped_user.Name);
    }

和XAML:

<ListView x:Name="lstContacts" Width="250" Grid.Row="1" Grid.Column="1">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" />
            </GridView>
        </ListView.View>

        <ListView.GroupStyle>
            <GroupStyle>
                <GroupStyle.HeaderTemplate>
                    <DataTemplate>
                        <TextBlock x:Name="lstItemContact" FontWeight="Bold" FontSize="14" Text="{Binding Name}" />
                    </DataTemplate>
                </GroupStyle.HeaderTemplate>
            </GroupStyle>
        </ListView.GroupStyle>
        <ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <EventSetter Event="PreviewMouseLeftButtonDown" Handler="lstItemContact_MouseDown" />
            </Style>                
        </ListView.ItemContainerStyle>
    </ListView>



<TextBlock AllowDrop="True" Drop="tbFavouritesDrop_Drop" Name="tbFavouritesDrop">
                    <Border CornerRadius="3" Background="OrangeRed" Height="7" Width="7" VerticalAlignment="Center" Margin="0 0 2 5"/>
                    <Label FontFamily="Segoe UI Light" FontSize="14" Padding="0">Favourites</Label>
                </TextBlock>

将项目拖到“收藏夹”组后,我收到以下错误: 其他信息:无法将“System.Windows.Controls.TextBlock”类型的对象强制转换为“AddressBook1.User” enter image description here

我不确定究竟是什么问题?问题是,我的listview项目是一个文本块吗?我发送的项目是用户对象,也是tbFavouritesDrop_Drop

编辑1:

我已将Drop事件处理程序更改为:

private void tbFavouritesDrop_Drop(object sender, DragEventArgs e)
        {
            TextBlock item = (TextBlock)sender;

            MessageBox.Show(item.Text);
        }

不会抛出任何异常,但.Text属性为空。

0 个答案:

没有答案