Eto: 关于移植到 Eto 的问题

创建于 2017-06-16  ·  5评论  ·  资料来源: picoe/Eto

你好!

我正在将我的程序移植到 Eto 框架,在接口的移植和调试期间,我有以下问题:

  1. 有没有办法禁用按钮(按钮)中的图像缩放以及为什么默认启用它?

  2. 为什么当按钮设置为 Enabled = false 时,按钮变淡,图标仍然亮? 如何修复(WPF 模式)?

  3. 为什么在 WinForms 模式下工具栏的按钮不会缩放到图片的大小 - 输出的实际图像大小较小? 因此,图像小于实际尺寸且模糊。

  4. 为什么绝对没有状态栏以及替换它们的选项是什么,如果真的需要它们(面板 + 标签?)。

  5. 如何正确实现应该统一属性 Drawable 和 Scrollable 组件的 CustomControl? 我试图使它们成为混合动力车,但没有奏效。 Drawable 会嵌套在 Scrollable 中吗? 或者有更好的解决方案吗?

  6. 有没有办法设置GridView列中值的对齐方式?

  7. 如何获取当前活动的应用程序窗口(如果有多个权限相同的 SDI 文档窗口)?

  8. 你打算在未来创建一个像 NUnitForms 这样的引擎来测试 UI 应用程序吗?

  9. 在 WPF 模式下,如果没有将 ClientSize 分配给对话框,则所有内容都与指定的布局完美对齐,并且对话框本身具有良好的大小。 然而,在 WinForms 模式下,对话框变小并且组件没有正确排列。 WinForms - 作为平台支持吗?

你能帮助我吗?

最有用的评论

嘿,

我认为您应该为每个问题单独打开问题,我只能回答您的几点。
Eto 的目标不是在所有平台上都以相同的方式行事(正如@cwensley在提出的一些问题中所说的那样),它的主要目标是在每个平台上看起来和行为都是本机的,这是您出现问题的主要原因。 您可以通过使用样式来解决其中的一些问题

  1. 这可以使用样式解决
  2. 我认为这与这个问题有关,我认为它可以通过样式解决。
  3. 因为它是默认的 WinForms 行为(据我记得在使用 winforms 时)可以通过样式解决
  4. 并非所有平台都具有/支持 StatusBar,如果我需要一个,如您所说,我会使用其中的项目进行堆叠布局。
  5. 为什么不直接将 Drawable 放到 Scrollable 布局中,让 Drawable 控件随心所欲?
  6. TextBoxCell 有一个名为 TextAlignment 和 VerticalAlignment 的属性:
    C# new GridColumn() { HeaderText = header, DataCell = new TextBoxCell() { Binding = binding, TextAlignment = TextAlignment.Center, VerticalAlignment = VerticalAlignment.Center }, };
  7. 你已经有了答案

所有5条评论

嘿,

我认为您应该为每个问题单独打开问题,我只能回答您的几点。
Eto 的目标不是在所有平台上都以相同的方式行事(正如@cwensley在提出的一些问题中所说的那样),它的主要目标是在每个平台上看起来和行为都是本机的,这是您出现问题的主要原因。 您可以通过使用样式来解决其中的一些问题

  1. 这可以使用样式解决
  2. 我认为这与这个问题有关,我认为它可以通过样式解决。
  3. 因为它是默认的 WinForms 行为(据我记得在使用 winforms 时)可以通过样式解决
  4. 并非所有平台都具有/支持 StatusBar,如果我需要一个,如您所说,我会使用其中的项目进行堆叠布局。
  5. 为什么不直接将 Drawable 放到 Scrollable 布局中,让 Drawable 控件随心所欲?
  6. TextBoxCell 有一个名为 TextAlignment 和 VerticalAlignment 的属性:
    C# new GridColumn() { HeaderText = header, DataCell = new TextBoxCell() { Binding = binding, TextAlignment = TextAlignment.Center, VerticalAlignment = VerticalAlignment.Center }, };
  7. 你已经有了答案

我很尴尬地问,但我无法解决“有没有办法禁用按钮(按钮)中的图像缩放以及为什么默认启用它?” 使用@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;
    }
}

wpf如何制作Eto按钮

谢谢@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的帮助

此页面是否有帮助?
0 / 5 - 0 等级