Перетащите WPF ComboBox, кнопки, кнопки радио и т. Д. - PullRequest
1 голос
/ 03 августа 2011

У меня есть проблема, я уже читал учебники, блоги и т. Д. О перетаскивании на WPF (я использую VS10).

Проблема в том, что мне нужен набор инструментов с кнопками,поле со списком, переключатель и т. д., так что пользователь может перетаскивать его (копировать) на рабочее пространство (холст или что-либо еще).

Мне удалось перетащить из текстового поля и изображений, но это не работаетдля меня, когда я попробовал кнопки или выпадающий список, он просто не работает, я предполагаю, что это является причиной события щелчка по умолчанию, я не знаю, в чем проблема.Вот то, что я пробовал с кнопкой.

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <TextBox Height="22" HorizontalAlignment="Left" Margin="84,36,0,0" Name="textBox1" VerticalAlignment="Top" Width="103" Text="Drag" />
    <TextBox Height="40" HorizontalAlignment="Left" Margin="225,136,0,0" Name="textBox3" VerticalAlignment="Top" Width="124" Text="Drop" />
    <Label Content="DragLabel" Height="26" HorizontalAlignment="Left" Margin="284,36,0,0" Name="label1" VerticalAlignment="Top" Width="80" MouseDown="label1_MouseDown" />
    <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="84,122,0,0" Name="button1" VerticalAlignment="Top" Width="75" MouseDown="button1_MouseDown" AllowDrop="True" IsEnabled="True" Click="button1_Click" />
    <Rectangle Height="100" HorizontalAlignment="Left" Margin="149,199,0,0" Name="rectangle1" Stroke="Black" VerticalAlignment="Top" Width="200" AllowDrop="True" Fill="#FFDCA1A1" />
</Grid>

Мой код позади ...

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void label1_MouseDown(object sender, MouseButtonEventArgs e)
        {
            Label lbl = (Label)sender;
            DragDrop.DoDragDrop(lbl, lbl.Content, DragDropEffects.Copy);
        }


        private void button1_MouseDown(object sender, MouseButtonEventArgs e)
        {
            var dependencyObject = (Button)sender;
            DragDrop.DoDragDrop(dependencyObject, dependencyObject, DragDropEffects.Move);
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            return;
        }
    }

Заранее спасибо, ребята.Кстати, извините за мой английский: s ...

Спасибо еще раз!

Луис

Ответы [ 2 ]

1 голос
/ 30 мая 2012
private void button1_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    var dependencyObject = (Button)sender;
    DragDrop.DoDragDrop(dependencyObject, dependencyObject, DragDropEffects.Move); 
} 

будет работать как указано Abe

1 голос
/ 03 августа 2011

Вы пытались использовать событие PreviewMouseDown вместо MouseDown?Ваш код будет вызван до того, как Button сможет перехватить щелчок.

Элементы WPF обычно используют RoutedEvents , которые часто имеют соответствующее событие "Предварительный просмотр", в котором используется стратегия маршрутизации туннелирования , который будет отправлен всем родителям до элемента, который фактически вызвал событие.Это позволяет вам выполнить свою операцию в ответ на MouseDown до того, как Button получит шанс выполнить действие щелчка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...