Tôi đang cố gắng mở rộng Nút để thêm sự kiện RightClick.Tôi có thể mở rộng Nút để thêm sự kiện RightClick theo cách mà các hiệu ứng phụ đồ họa cũng được duy trì không?
Khách hàng của tôi muốn một nút để thực hiện những việc khác nhau tùy thuộc vào việc bạn nhấp chuột trái hay nhấp chuột phải. Tôi mong đợi có một sự kiện dễ dàng để nhấp chuột phải, nhưng hóa ra là không có.
Tôi muốn hành vi trực quan của Button giống hệt với sự kiện Nhấp chuột trước đó, nhưng điều đó chứng minh là khó khăn. Nút có nhiều hành vi đồ họa xảy ra khi bạn nhấp và kéo và tắt nút.
- Khi bạn nhấp xuống, nút này sẽ hạ thấp. Nếu bạn kéo nút giảm xuống, nó sẽ tăng (ví dụ: un-lowers). Bất kỳ nút nào khác bạn kéo qua sẽ bỏ qua nó.
- Khi bạn kéo trở lại nút gốc, nút này sẽ giảm xuống một lần nữa.
- Nếu bạn kéo và sau đó nhả ra, trạng thái của nút gốc sẽ được đặt lại (tức là bạn không thể reclick và kéo lại).
Những quirks đồ họa nhỏ này sẽ trông thô ráp nếu hình ảnh nhấp chuột trái không khớp với hình ảnh nhấp chuột phải.
Hiện tại tôi đang bị kẹt: Nếu nhấp chuột phải và giữ nút, sau đó kéo nút, làm cách nào để phát hiện xem người dùng có nhấp chuột không? Tôi cần phải biết điều này vì vậy tôi có thể biết không phải để hạ thấp nút trên tái nhập cảnh.
Câu hỏi rộng hơn: Tôi có đi đúng hướng không? Tôi không thể tìm thấy ai đã làm điều này trước đây. Mã của tôi là dưới đây.
public class RightClickButton : Button
{
public event RoutedEventHandler RightClick;
public RightClickButton()
{
this.MouseRightButtonDown += new System.Windows.Input.MouseButtonEventHandler(RightClickButton_MouseRightButtonDown);
this.MouseRightButtonUp += new System.Windows.Input.MouseButtonEventHandler(RightClickButton_MouseRightButtonUp);
this.MouseEnter += new System.Windows.Input.MouseEventHandler(RightClickButton_MouseEnter);
this.MouseLeave += new System.Windows.Input.MouseEventHandler(RightClickButton_MouseLeave);
}
void RightClickButton_MouseRightButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
this.IsPressed = true;
}
void RightClickButton_MouseRightButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
this.IsPressed = false;
if (RightClick != null)
RightClick.Invoke(this, e);
}
void RightClickButton_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
{
if (this.IsPressed)
this.IsPressed = false;
}
void RightClickButton_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
{
if (this.IsFocused && Mouse.RightButton == MouseButtonState.Pressed)
this.IsPressed = true;
}
}
Xem câu hỏi liên quan đến một trong các điểm gắn bó của tôi: [Tôi có thể nhận được sự kiện MouseLeave trong khi Chuột không.Capture() đang hoạt động?] (Http://stackoverflow.com/questions/9961050/can-i-get-a-mouseleave-event-while-mouse-capture-is-active) –