In lạiTác giả: Tôi là chú chim nhỏThời gian cập nhật: 2023-02-07 14:31:29254
Khi sử dụng avalonia, một số chức năng nhất định cần có lời nhắc. Ví dụ: người dùng cần được nhắc về các trường hợp ngoại lệ hoặc thành công, do đó, chức năng bật lên cần được triển khai riêng và các thành phần bên trong có thể được tùy chỉnh. Trong vấn đề này, một cửa sổ bật lên nhỏ đơn giản. -up sẽ được thực hiện thủ công trên windows và có thể tùy chỉnh dễ dàng.
Tạo dự án
Để triển khai, chúng ta cần tạo mẫu dự án avalonia MVVM.
Và được đặt tên là PopoverExample.
Sau đó, nó luôn được tạo theo mặc định.
Tạo thành phần bật lên
Tạo một thành phần trong thư mục Chế độ xem, chọn mẫu Cửa sổ và tạo Hộp thoại tên.
Sau đó mở tệp Dialog.axaml và sửa đổi mã liên quan.
Không có
Đoạn mã sau được sử dụng để ẩn thanh tiêu đề mặc định.
ExtendClientAreaToDecorationsHint="Đúng" ExtendClientAreaChromeHints="Không có Chrome" ExtendClientAreaTitleBarHeightHint="-1"
Mở DialogBase.axaml.cs và sửa đổi mã.
sử dụng Avalonia; sử dụng Avalonia.Controls; sử dụng Avalonia.Interactivity; sử dụng Avalonia.Markup.Xaml; không gian tên Dialog.Views; lớp một phần công khai DialogBase : Window { công khai DialogBase() { InitializeComponent(); #if DEBUG this.AttachDevTools(); #endif } private void InitializeComponent() { AvaloniaXamlLoader.Load(this); } private void Close_OnClick(object? sender, RoutedEventArgs e) { Close(); } }
tạo nên Đối thoại Quản lý lớp học
Tạo một lớp Quản lý hộp thoại để quản lý Hộp thoại Tạo DialogManager.cs và thêm mã sau đây.
sử dụng System; sử dụng System.Collections.Generic; sử dụng System.Threading.Tasks; sử dụng Avalonia.Controls; sử dụng Avalonia.Threading; không gian tên Dialog.Views; = new(); public static void Show(Loại hộp thoại, nội dung chuỗi, chiều cao int = 100, int width = 200, int Timing = 3000) { DialogBase Dialog; // Để ngăn chặn sự tương tranh, bạn có thể tự sửa đổi khóa (_dialogBases) { if (_dialogBases.Remove(type, out var voiceBase)) { try { voiceBase.Close() ; } bắt { } } hộp thoại = DialogBase mới { Chiều cao = chiều cao, Chiều rộng = chiều rộng, WindowStartupLocation = WindowStartupLocation.Manual // Không thể sửa đổi vị trí cửa sổ nếu nó không được đặt}; if (timing > 0) { // Cửa sổ bật lên bị đóng thường xuyên_ = Task.Run(async () => { đang chờ Task.Delay (timing); // Đầu tiên Xóa và lấy giá trị đã xóa if (_dialogBases.Remove(type, out var voiceBase)) { // Các thành phần vận hành yêu cầu sử dụng ui thread_ = Dispatcher.UIThread.InvokeAsync(() => { try { // Đóng thành phần cửa sổ bật lên voiceBase.Close(); } // Nó có thể đã bị đóng nên có thể xảy ra ngoại lệ Catch { } } }); ; } // Thêm vào từ điển_dialogBases.TryAdd(type, hộp thoại); } // Lấy màn hình hiện tại varbounds = hộp thoại.Screens.ScreenFromVisual(dialog).Bounds; // offset int skewing = 20; // chiều cao thanh tác vụ của cửa sổ int taskbar = 50; switch (type) { case DialogType.topLeft: x = skewing ; lệch; ngắt; y = xiên; ngắt; (bounds.Height - voice.Height) - thanh tác vụ - skewing; case DialogType.centerLower: x = (int)((bounds.Width - hộp thoại.Width) / 2); y = (int)(bounds.Height - hộp thoại.Height) - thanh tác vụ - xiên; ); y = (int)(bounds.Height - hộp thoại.Height) - thanh tác vụ - xiên mặc định: ném mới; ArgumentOutOfRangeException(nameof(type), type, null); } // Đặt vị trí của hộp thoại cửa sổ bật lên.Position = new PixelPoint(x, y); // Lấy thành phần hiển thị nội dung và hiển thị nội dung var contentBox = hộp thoại.Tìm ("Nội dung"); contentBox.Text = nội dung hộp thoại.Show() } } public enum DialogType { /// /// Trên cùng bên trái /// topLeft, /// /// Giữa và trên cùng /// topCenter, /// /// Trên cùng bên phải /// topRight, /// /// Phía dưới bên trái /// bên tráiLower, /// /// Chính giữa và phía dưới /// centerLower, /// /// phía dưới bên phải /// bên phảiLower }
Thành phần cửa sổ bật lên đã được hoàn thành.
Sử dụng cơ bản cửa sổ bật lên
Mở tệp MainWindow.axaml và sửa đổi mã.
Mở MainWindow.axaml.cs và sửa đổi mã liên quan.
sử dụng Avalonia.Controls; sử dụng Avalonia.Interactivity; không gian tên Dialog.Views; public một phần lớp MainWindow : Window { public MainWindow() { LaunchizeComponent() } // Xác định giá trị bắt đầu của phép liệt kê riêng tư int i = 0; ( object? sender, RoutedEventArgs e) { // Cửa sổ mới bật lên DialogManager.Show((DialogType)i++, "Nội dung cửa sổ bật lên:" + i); // Gán lại nếu vượt quá giá trị liệt kê if (i == 6) { i = 0;
Hiệu ứng thực thi
Chia sẻ từ mã thông báo.
Cuối cùng, bài viết về cửa sổ bật lên tùy chỉnh của avalonia kết thúc tại đây. Nếu bạn muốn biết thêm về cửa sổ bật lên tùy chỉnh của avalonia, vui lòng tìm kiếm các bài viết về CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai. .
Tôi có một cửa sổ bật lên có "viền" 500x500 bên trong điều khiển người dùng... Khi người dùng nhấp vào nút để mở cửa sổ bật lên này, tôi muốn đường viền xuất hiện ở giữa ứng dụng (theo chiều ngang/dọc) thay vì điều khiển của người dùng . Tôi nên làm gì? Câu trả lời hay nhất bạn có thể lấy được cặp hình ảnh gốc
Có vấn đề gì với mã được tạo của tôi? Tôi đang cố gắng làm cho UIPickerView bật lên khi nhấp vào trường văn bản, sau đó biến mất sau khi thực hiện lựa chọn. Trường văn bản sẽ hiển thị lựa chọn tiếp theo. nhập lớp UIKit CreateAJob_V
Tôi hiện đang phát triển một trang web. Hãy để tôi thuật lại vấn đề tôi đang gặp phải: Khi người dùng mở trang web, họ sẽ thấy hai tùy chọn trong một cửa sổ bật lên nhỏ. Tùy chọn đầu tiên trong cửa sổ bật lên sẽ trỏ đến tên miền phụ 1 Tùy chọn thứ hai trong cửa sổ bật lên sẽ trỏ đến tên miền phụ 2 Bây giờ câu hỏi của tôi
JavaScript có ba cửa sổ bật lên: Cảnh báo (chỉ nút OK), Xác nhận (các nút OK, Hủy, v.v.) và Lời nhắc (với hộp thoại nhập) và không thể định vị được cửa sổ bật lên thông qua các công cụ giao diện người dùng. Đây là
Tôi muốn có thể nhấp vào bên ngoài cửa sổ bật lên để làm cho nó biến mất. Mã này hoạt động tốt - một cửa sổ bật lên bị đóng trong khi một cửa sổ bật lên khác đang mở và tất nhiên nó sẽ biến mất khi bạn nhấp lại vào nút. var $visiblePopover $('body').o
Tôi muốn xem liệu stackoverflow có sử dụng một plugin riêng để thực hiện các cửa sổ bật lên màu vàng sáng có nội dung "Vui lòng xem xét việc đánh dấu câu trả lời này là được chấp nhận hoặc" Vui lòng xem xét thêm nhận xét để giải thích lý do bạn đánh giá thấp" Cái này dành cho việc này Đã sử dụng một jquery
Định nghĩa kiểu sau đây bằng cách nào đó làm hỏng màn hình của tôi và làm cho lớp R có màu đỏ. Xem ảnh chụp màn hình ở đây và ở đây ?android:attr/ratedB
đóng cửa. Câu hỏi này cần tập trung hơn. Hiện tại nó không chấp nhận câu trả lời. Bạn muốn cải thiện câu hỏi này? Đã cập nhật câu hỏi để tập trung vào một vấn đề chỉnh sửa bài đăng này. Đã đóng 4 năm trước. Cải thiện câu hỏi này
Tôi gặp sự cố với ứng dụng iOS của mình: Khi tôi chạm vào nút "Mua" để mua sản phẩm IAP, một cửa sổ bật lên sẽ hiển thị thông báo này: Giao dịch mua trong ứng dụng này đã được mua.
Tôi đang học OpenCV trên Windows và tôi đang sử dụng Code::bloks. Khi tôi gọi hàm imshow(), nó sẽ hiển thị một cửa sổ bật lên có hình ảnh trong đó. Vấn đề là tôi không thể chia tỷ lệ cửa sổ này nên không thể nhìn thấy giá trị pixel. hầu hết
Tôi là một lập trình viên xuất sắc, rất giỏi!