Jika Anda mengatur ResizeMode="CanResizeWithGrip"
pada WPF Window
maka pegangan pengubah ukuran ditampilkan di sudut kanan bawah, seperti di bawah ini:
Jika Anda juga menyetel WindowStyle="None"
bilah judul menghilang tetapi tepi miring abu-abu tetap ada hingga Anda menyetelnya ResizeMode="NoResize"
. Sayangnya, dengan kombinasi set properti ini, pegangan pengubah ukuran juga menghilang.
Saya telah mengganti Window
's ControlTemplate
melalui kebiasaan Style
. Saya ingin menentukan sendiri batas jendela, dan saya tidak membutuhkan pengguna untuk dapat mengubah ukuran jendela dari keempat sisi, tetapi saya membutuhkan pegangan pengubah ukuran.
Bisakah seseorang merinci cara sederhana untuk memenuhi semua kriteria ini?
- Jangan beri batas di bagian
Window
samping dari yang saya tentukan sendiri di aControlTemplate
. - Apakah memiliki pegangan pengubah ukuran yang berfungsi di sudut kanan bawah.
- Tidak memiliki bilah judul.
.net
wpf
window
controltemplate
resizegrip
Drew Noakes
sumber
sumber
Jawaban:
Jika Anda menyetel
AllowsTransparency
properti padaWindow
(bahkan tanpa menyetel nilai transparansi apa pun) batasnya menghilang dan Anda hanya dapat mengubah ukurannya melalui pegangan.Hasilnya terlihat seperti:
sumber
Saya mencoba membuat jendela tanpa bingkai dengan
WindowStyle="None"
tetapi ketika saya mengujinya, tampaknya muncul bilah putih di bagian atas, setelah beberapa penelitian tampaknya menjadi "Ubah ukuran bingkai", berikut adalah gambar (saya berkomentar dengan warna kuning):Setelah beberapa penelitian melalui internet, dan banyak solusi non xaml yang sulit, semua solusi yang saya temukan adalah kode di belakang dalam C # dan banyak baris kode, saya menemukan secara tidak langsung solusinya di sini: Jendela kustom maksimum kehilangan efek bayangan drop
Catatan : Anda perlu menggunakan kerangka kerja .NET 4.5, atau jika Anda menggunakan versi yang lebih lama gunakan WPFShell, cukup rujuk shell dan gunakan
Shell:WindowChrome.WindowChrome
sebagai gantinya.Saya menggunakan
WindowChrome
properti Window, jika Anda menggunakan ini, "batas ubah ukuran" putih menghilang, tetapi Anda perlu menentukan beberapa properti untuk bekerja dengan benar.CaptionHeight: Ini adalah ketinggian area teks (headerbar) yang memungkinkan Aero snap, perilaku klik ganda seperti yang dilakukan bilah judul normal. Setel ini ke 0 (nol) untuk membuat tombol berfungsi.
ResizeBorderThickness: Ini adalah ketebalan di tepi jendela tempat Anda dapat mengubah ukuran jendela. Saya menempatkan 5 karena saya suka angka itu, dan karena jika Anda meletakkan nol sulit untuk mengubah ukuran jendela.
Setelah menggunakan kode singkat ini hasilnya adalah:
Dan sekarang, batas putih menghilang tanpa menggunakan
ResizeMode="NoResize"
danAllowsTransparency="True"
, juga itu menunjukkan bayangan di jendela.Nanti saya akan menjelaskan cara membuat tombol bekerja (saya tidak menggunakan gambar untuk tombol) dengan mudah dengan kode yang sederhana dan pendek, saya baru dan saya pikir saya dapat memposting ke codeproject, karena di sini saya tidak menemukan tempatnya untuk memposting tutorial.
Mungkin ada solusi lain (saya tahu bahwa ada solusi yang sulit dan sulit untuk pemula seperti saya) tetapi ini berfungsi untuk proyek pribadi saya.
Ini kode lengkapnya
Terima kasih!
sumber
Rectangle_PreviewMouseDown
acara dengan benar.Meskipun jawaban yang diterima sangat benar, hanya ingin menunjukkan bahwa AllowTransparency memiliki beberapa kelemahan. Ini tidak mengizinkan kontrol jendela anak muncul, yaitu WebBrowser, dan biasanya memaksa rendering perangkat lunak yang dapat memiliki efek kinerja negatif.
Ada solusi yang lebih baik.
Saat Anda ingin membuat jendela tanpa batas yang dapat diubah ukurannya dan dapat menjadi tuan rumah kontrol WebBrowser atau kontrol Frame menunjuk ke URL yang tidak bisa Anda lakukan, konten kontrol tersebut akan ditampilkan kosong.
Saya menemukan solusi; di Window, jika Anda mengatur WindowStyle ke None, ResizeMode ke NoResize (bersabarlah, Anda masih dapat mengubah ukuran setelah selesai) maka pastikan Anda memiliki AllowsTransparency UNCHECKED Anda akan memiliki jendela berukuran statis tanpa batas dan akan ditampilkan kontrol browser.
Sekarang, Anda mungkin masih ingin mengubah ukuran, bukan? Kita bisa melakukannya dengan panggilan interop:
Dan voila, Jendela WPF tanpa batas dan masih dapat dipindahkan dan diubah ukurannya tanpa kehilangan kompatibilitas dengan kontrol seperti WebBrowser
sumber
private enum ResizeDirection { Left = 61441, Right = 61442, Top = 61443, TopLeft = 61444, TopRight = 61445, Bottom = 61446, BottomLeft = 61447, BottomRight = 61448, }
Contoh di sini:
sumber
Saya mengalami kesulitan mendapatkan jawaban oleh @ fernando-aguirre menggunakan
WindowChrome
untuk bekerja. Itu tidak bekerja dalam kasus saya karena saya meng-overrideOnSourceInitialized
dalamMainWindow
dan tidak memanggil metode kelas dasar.Ini membuat saya bingung untuk waktu yang sangat lama.
sumber