أهلا!
أقوم بنقل برنامجي إلى إطار عمل Eto وأثناء نقل الواجهة وتصحيحها لدي الأسئلة التالية:
هل هناك طريقة لتعطيل تحجيم الصور في الأزرار (الزر) ولماذا يتم تمكينه افتراضيًا؟
لماذا عندما يكون الزر مضبوطًا على ممكّن = خطأ ، ويصبح الزر شاحبًا ، ويظل الرمز ساطعًا؟ كيف يمكن إصلاح ذلك (وضع WPF)؟
لماذا في وضع WinForms ، لا تتناسب أزرار شريط الأدوات مع حجم الصور - يتم إخراج حجم أقل للصورة الحقيقية؟ لهذا السبب ، تكون الصور أقل من الحجم الفعلي وضبابية.
لماذا لا توجد أشرطة حالة على الإطلاق وما هي الخيارات المتاحة لاستبدالها ، إذا كانت هناك حاجة فعلاً لها (لوحة + ملصقات؟).
كيف يتم تنفيذ CustomControl بشكل صحيح والذي يجب أن يوحِّد الخصائص القابلة للرسم والمكونات القابلة للتمرير؟ لقد حاولت أن أجعلها هجينة ، لكنها لم تنجح. هل سيتم دمج Drawable في Scrollable؟ أو هناك حل أفضل؟
هل هناك طريقة لتعيين محاذاة القيم في أعمدة GridView؟
كيف يمكنني الحصول على نافذة التطبيق النشطة الحالية (إذا كانت هناك عدة نوافذ وثيقة SDI متساوية في الحقوق)؟
هل تخطط لإنشاء محرك مثل NUnitForms في المستقبل - لاختبار تطبيقات واجهة المستخدم؟
في وضع WPF ، إذا لم يتم تعيين ClientSize لمربع الحوار ، فسيتم محاذاة كل شيء تمامًا مع التخطيط المحدد ، ويأخذ مربع الحوار حجمًا جيدًا. ومع ذلك ، في وضع WinForms ، يتضح أن مربع الحوار صغير وأن المكونات لا تصطف بشكل صحيح. WinForms - مدعومة كمنصة؟
هل يمكنك مساعدتي؟
مهلا،
أعتقد أنه يجب عليك فتح قضايا منفصلة لكل مشكلة من مشاكلك ، ولا يمكنني الإجابة إلا على بضع نقاط من مشكلتك.
لا تهدف Eto إلى التصرف بنفس الطريقة على جميع المنصات (كما قال cwensley في بعض القضايا التي أثيرت) ، الهدف الرئيسي هو البحث والتصرف بشكل أصلي على كل منصة ، وهذا هو السبب الرئيسي لمشاكلك. يمكنك حل بعضها باستخدام التصميم
C#
new GridColumn()
{
HeaderText = header,
DataCell = new TextBoxCell()
{
Binding = binding,
TextAlignment = TextAlignment.Center,
VerticalAlignment = VerticalAlignment.Center
},
};
أشعر بالحرج لسؤالي ولكنني غير قادر على حل "هل هناك طريقة لتعطيل تحجيم الصور في الأزرار (الزر) ولماذا يتم تمكينه افتراضيًا؟" باستخدام الأنماط كما اقترحهSlowLogicBoy.
أبعد ما استطعت أن أقطعه هو:
Style.Add<Eto.Wpf.Forms.Controls.ButtonHandler>(null, handler => ?????? ));
هل يمكنك تقديم مثال على كيفية القيام بذلك؟
شكرا
لست على دراية بـ wpf ، لذلك هذا ما يمكنني تقديمه لك:
using swc = System.Windows.Controls;
Style.Add<Eto.Wpf.Forms.Controls.ButtonHandler>(null, handler => {
var grid = handler.Control.Content as swc.Grid;
if(grid == null) return; //Something in ButtonHandler changed
var imageCtrl = grid.GetChildOfType<swc.Image>().SingleOrDefault();
if(imageCtrl == null) return; //Something in ButtonHandler changed
//TODO: Stuff with imageCtrl
});
static IEnumerable<T> GetChildOfType<T>(this swc.Grid self)
{
foreach (var item in self.Children)
{
if(item is T ctrl)
yield return ctrl;
}
}
شكرًا لك SlowLogicBoy ، يعد الرمز الخاص بك بالتأكيد نقطة انطلاق جيدة للوصول إلى زر Wpf ، وسأحاول المتابعة ومعرفة كيفية تعطيل القياس بنفسي :)
بالنسبة للسجلات ، يقوم المقتطف التالي بالمهمة:
Style.Add<Eto.Wpf.Forms.Controls.ButtonHandler>(null, handler =>
{
var grid = handler.Control.Content as swc.Grid;
if (grid == null)
return;
var image = grid.Children.OfType<swc.Image>().FirstOrDefault();
if (image == null)
return;
image.Stretch = System.Windows.Media.Stretch.None;
});
شكرا SlowLogicBoy لمساعدته
التعليق الأكثر فائدة
مهلا،
أعتقد أنه يجب عليك فتح قضايا منفصلة لكل مشكلة من مشاكلك ، ولا يمكنني الإجابة إلا على بضع نقاط من مشكلتك.
لا تهدف Eto إلى التصرف بنفس الطريقة على جميع المنصات (كما قال cwensley في بعض القضايا التي أثيرت) ، الهدف الرئيسي هو البحث والتصرف بشكل أصلي على كل منصة ، وهذا هو السبب الرئيسي لمشاكلك. يمكنك حل بعضها باستخدام التصميم
C# new GridColumn() { HeaderText = header, DataCell = new TextBoxCell() { Binding = binding, TextAlignment = TextAlignment.Center, VerticalAlignment = VerticalAlignment.Center }, };