كيفية الحصول على عناصر التحكم في WPF لملء المساحة المتوفرة?

StackOverflow https://stackoverflow.com/questions/36108

  •  09-06-2019
  •  | 
  •  

سؤال

بعض WPF التحكم (مثل Button) يبدو بسعادة تستهلك كل availible الفضاء في' الحاوية إذا كنت لا تحديد الارتفاع هو أن يكون.

بعض, مثل تلك التي كنت بحاجة إلى استخدام الآن (متعدد) TextBox و ListBox يبدو أكثر قلقا من مجرد أخذ مساحة من الضروري أن تناسب محتواها و لا أكثر.

إذا وضعت هؤلاء الرجال في زنزانة في UniformGrid, أنهم سوف توسيع لتناسب المساحة المتاحة.ومع ذلك ، UniformGrid حالات لا حق لجميع الحالات.ما إذا كان لديك شبكة مع بعض الصفوف تعيين * الارتفاع إلى تقسيم الطول بين نفسه وغيره * الصفوف ؟ ما إذا كان لديك StackPanel وكان لديك Label, ، Listو Button, كيف يمكن الحصول على قائمة من أن تأخذ كل مساحة لا تؤكل من قبل التسمية على الزر ؟

أعتقد أن هذا سيكون حقا الأساسية تخطيط شرط, ولكن أنا لا يمكن معرفة كيفية الحصول عليها لملء الفراغ الذي يمكن (وضعها في DockPanel ووضع ذلك لملء أيضا لا تعمل ، على ما يبدو ، منذ DockPanel فقط تأخذ المساحة اللازمة من قبل' subcontrols).

يمكن تغيير حجم واجهة المستخدم الرسومية سيكون تماما الرهيبة إذا كان لديك للعب مع Height, Width, MinHeight, MinWidth الخ.

يمكنك ربط الخاص بك Height و Width خصائص الشبكة الخلية التي تحتل?أو أن هناك طريقة أخرى للقيام بذلك ؟

هل كانت مفيدة؟

المحلول

كل التحكم المستمدة من Panel تنفذ متميزة تخطيط المنطق يؤديها في Measure() و Arrange():

  • Measure() يحدد حجم الفريق و كل من الأطفال
  • Arrange() يحدد المستطيل حيث كل عنصر تحكم يجعل

آخر طفل من DockPanel يملأ المساحة المتبقية.يمكنك تعطيل هذا السلوك من خلال وضع LastChild الملكية false.

على StackPanel يطلب من كل طفل عن الحجم المطلوب ثم أكوام لهم.كومة الفريق المكالمات Measure() على كل طفل مع حجم المتاحة Infinity ثم يستخدم الطفل الحجم المطلوب.

A Grid تحتل كل المساحة المتاحة ، ومع ذلك ، فإنه سيتم تعيين كل طفل إلى الحجم المطلوب ثم مركز لهم في الخلية.

يمكنك تنفيذ تخطيط الخاصة بك المنطق المستمد من Panel ثم الطاغيه MeasureOverride() و ArrangeOverride().

انظر هذه المادة على مثال بسيط.

نصائح أخرى

هناك أيضا بعض الخصائص التي يمكنك تعيينها إلى فرض السيطرة على ملء المساحة المتاحة عندما لا تفعل ذلك.على سبيل المثال ، يمكنك أن تقول:

HorizontalContentAlignment="Stretch"

...إلى قوة محتويات عنصر تحكم تمتد أفقيا.أو يمكنك أن تقول:

HorizontalAlignment="Stretch"

...لفرض السيطرة على نفسها أن تمتد أفقيا لملء الأم.

حسنا لقد اكتشفت ذلك بنفسي, بعد نشر, والذي هو الأكثر محرج الطريق.:)

يبدو كل عضو StackPanel ببساطة ملء الدنيا الحجم المطلوب.

في DockPanel, كنت قد رست الأمور في الترتيب غير صحيح.إذا كان مربع نص أو مربع القائمة هو فقط رست البند دون محاذاة ، أو إذا كانت آخر وأضاف أنهم سوف ملء المساحة المتبقية كما تريد.

أنا أحب أن أرى أكثر أناقة الأسلوب من التعامل مع هذا ، لكنها لن تفعل.

استخدام HorizontalAlignment و VerticalAlignment تخطيط خصائص.أنها تتحكم في كيفية عنصر يستخدم مساحة له داخل الأم عند أكثر غرفة المتاحة من أنه مطلوب من قبل عنصر.

عرض StackPanel ، على سبيل المثال ، سوف تكون واسعة كما أوسع العناصر التي يحتوي عليها.لذا كل أضيق عناصر قليلا من المساحة الزائدة.المواءمة بين خصائص التحكم الطفل عنصر يفعل مع مساحة إضافية.

القيمة الافتراضية لكل خصائص تمتد حتى الطفل عنصر امتدت إلى ملء كل المساحة المتوفرة.وتشمل الخيارات الإضافية اليسار والوسط واليمين على HorizontalAlignment و مركز أعلى وأسفل عن VerticalAlignment.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top