你好!
我正在将我的程序移植到 Eto 框架,在接口的移植和调试期间,我有以下问题:
有没有办法禁用按钮(按钮)中的图像缩放以及为什么默认启用它?
为什么当按钮设置为 Enabled = false 时,按钮变淡,图标仍然亮? 如何修复(WPF 模式)?
为什么在 WinForms 模式下工具栏的按钮不会缩放到图片的大小 - 输出的实际图像大小较小? 因此,图像小于实际尺寸且模糊。
为什么绝对没有状态栏以及替换它们的选项是什么,如果真的需要它们(面板 + 标签?)。
如何正确实现应该统一属性 Drawable 和 Scrollable 组件的 CustomControl? 我试图使它们成为混合动力车,但没有奏效。 Drawable 会嵌套在 Scrollable 中吗? 或者有更好的解决方案吗?
有没有办法设置GridView列中值的对齐方式?
如何获取当前活动的应用程序窗口(如果有多个权限相同的 SDI 文档窗口)?
你打算在未来创建一个像 NUnitForms 这样的引擎来测试 UI 应用程序吗?
在 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 }, };