Как узнать, выполняете ли вы Dropping в том же экземпляре приложения, где вы сделали Drag в WPF? - PullRequest
0 голосов
/ 05 августа 2011

заголовок в значительной степени объясняет мою проблему:

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

Теперь я хотел бы знать, перетаскиваю ли я «внутренне»(то есть: падение происходит в том же случае, что и перетаскивание) или «внешне» (наоборот)

Я зашел так далеко: мне нужно добавить в мои перетаскиваемые данные уникальный идентификатор (что-то вроде PUID)это идентифицирует приложение, где я делаю перетаскивание.Затем я могу просто сравнить этот идентификатор с идентификатором, который у меня есть локально, и посмотреть, не является ли он тем же.

У меня нет проблем с передачей такой информации в моих данных перетаскивания, проблема в том, чтобы найти этот UId.

Я думал об использовании Process.GetCurrentProcess().MainWindowHandle;, но я не уверен, что это хорошая идея.

Какие опции у меня есть, чтобы эта работа работала?

Ответы [ 2 ]

2 голосов
/ 05 августа 2011

Я бы просто создал Guid только для чтения, который устанавливается при запуске приложения.

Вы можете разместить это там, где живет ваша основная логика (MainWindow или ViewModel).

Вот фрагмент:

public class MyViewModel
{
    private readonly Guid mUID = Guid.NewGuid();

    // In case you want a property for it
    public string UniqueApplicationID
    {
        get { return mUID; }
    }

    public void OnDropHandler(MyViewModel objectBeingDropped)
    {
        if (objectBeingDropped.UniqueApplicationID == mUID)
            return;

       // Handle drop normally here
    }
}
0 голосов
/ 05 августа 2011

D-n-D во многом напоминает пользовательский интерфейс, чем внутренний.

Я бы различал два контекста: удаление файла и удаление какого-либо объекта (например, конструктора VS). В первом контексте нет никаких проблем, потому что не имеет значения, куда вы извлекаете данные. Во втором случае вы должны знать, какой объект был выбран. Например, у вас есть список со многими элементами (например, алфавитными символами), когда пользователь D-n-D выберет любой из этих элементов, внутренняя операция будет простой ссылкой на выбранный объект. Извлекая данные из другого приложения, вы не сможете найти свой объект, потому что источник другой.

В случае структур или строк вы можете обернуть их GUID, как вы правильно предложили.

...