WPF: кнопка с настраиваемым шаблоном не может быть нажата в целом [дубликат]

Согласно этому источнику , он предназначен для эффективной компиляции:

На боковой панели это объясняет, почему: «Это ограничение еще не реализовано компилятором, хотя это необходимо для эффективного импорта пакетов »

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

То же самое относится и к импорту исходных файлов в IDE. Другая причина - разумные размеры источников.

4
задан Sam I am 22 March 2013 в 22:42
поделиться

3 ответа

Вам просто нужно установить фон Canvas, так как он получает только ввод мыши, где он имеет «отображаемый контент». Фон может быть даже прозрачным:

<Canvas Name="canvas" Background="Transparent"
        MouseLeftButtonDown="Canvas_MouseLeftButtonDown_1">
    ...
</Canvas>
1
ответ дан Clemens 16 August 2018 в 05:29
поделиться
  • 1
    Он отлично работает сейчас, спасибо вам большое :) – user2200747 23 March 2013 в 00:28

используйте это вместо события Canvas_MouseLeftButtonDown_1:

protected override OnMouseDown(MouseButtonEventArgs e)
{
    if(e.Changed == MouseButton.Left)
      {
    // Your logic on mouse down will go here
      }
    base.OnMouseDown(e);
}

с этим вы можете щелкнуть в любом месте холста и запустить событие. Надеюсь, это поможет ..

1
ответ дан Faaiz Khan 16 August 2018 в 05:29
поделиться
  • 1
    Или просто установите фон Canvas. – Clemens 22 March 2013 в 23:56
  • 2
    Это решение работает только потому, что вы переопределяете обработчик событий мыши в классе MainWindow, и по умолчанию окно имеет фон. Попробуйте установить Background="{x:Null}", и он больше не будет работать. И, кстати, если вы переопределите OnMouseLeftButtonDown, нет необходимости проверять e.Changed. – Clemens 23 March 2013 в 00:29

Canvas является UIElement. Это позволяет использовать событие PointerPressed .

private void Target_PointerMoved(object sender, PointerRoutedEventArgs e)
{
    Windows.UI.Xaml.Input.Pointer ptr = e.Pointer;

    if (ptr.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Mouse)
    {

        Windows.UI.Input.PointerPoint ptrPt = e.GetCurrentPoint(Target);
        if (ptrPt.Properties.IsLeftButtonPressed)
        {
            //do yo thang
        }
    }
}
2
ответ дан tnw 16 August 2018 в 05:29
поделиться
  • 1
    Это похоже на хороший план, но когда я пытаюсь реализовать это в своем коде, я получаю следующее сообщение об ошибке: Тип или имя пространства имен «Windows» не удалось найти (вам не хватает директивы using или ссылки на сборку?). Кстати, я пытаюсь воспроизвести программу как простую программу Windows 7 (не для мобильного устройства) – user2200747 22 March 2013 в 23:20
  • 2
    Сообщение об ошибке достаточно ясно, вам нужно добавить ссылку на эту сборку в свой проект ... – Dean Kuga 22 March 2013 в 23:30
  • 3
    Это может работать в приложении Windows Store, но я не уверен в WPF. – Clemens 23 March 2013 в 00:47
Другие вопросы по тегам:

Похожие вопросы: