0

我正在使用 wxWidgets 3.0.2 在 OSX (Yosemite) 中构建一个项目。

我可以使用 wxBORDER_NONE 移除 wxTextCtrl 窗口周围的蓝色边框。但是当我把它放在一个sizer中时,它有一个我无法摆脱的3像素灰色边框。有 2 个边框有什么意义,其中一个不能删除?当然,人们想要定制的不仅仅是这些吗?

有什么办法可以去掉吗?我真的不想破解 wx 源代码,但如果必须的话,我会这样做。

或者是否有另一种不使用尺寸器来控制布局的方法,而不是可能导致边框不出现?


更新:这似乎是焦点突出边框。我不想要它。

有什么方法可以禁用聚焦的 UI 对象周围的边框?这太令人沮丧了,因为它是一件小事,但如果不能删除它,我的程序就没用了。

4

2 回答 2

1

万一其他人偶然发现这篇文章,这个答案是针对更新后的问题:

更新:这似乎是焦点突出边框。我不想要它。

有什么方法可以禁用聚焦的 UI 对象周围的边框?

使用 wxWidgets API,不,没有办法删除它,因为它是本机NSTextField类的行为。我只能通过编辑 wx 源本身以将基础对象的focusRingType属性设置为NSFocusRingTypeNone来删除它:NSTextField


文件:core/textctrl.mm
功能:wxWidgetImpl::CreateTextControl

NSTextField* v = nil;
if ( style & wxTE_PASSWORD )
    v = [[wxNSSecureTextField alloc] initWithFrame:r];
else
    v = [[wxNSTextField alloc] initWithFrame:r];

...

// remove glow/border when textfield gets focused 
[v setFocusRingType:NSFocusRingTypeNone];

我也设置BORDER_NONE了我的wxTextCtrl.

当然,这种改变了标准 OS X 的外观和感觉,所以也许这就是为什么它没有作为wxTextCtrlAPI 公开的原因?还是它破坏了其他东西?但到目前为止,它对我来说工作正常。另外,我的应用程序需要有自己的自定义主题,与发光边框不匹配。

我正在使用 wxWidgets 3.1.0(从他们的repo克隆)和 OS X 10.12。

于 2017-07-12T01:08:59.140 回答
0

这对我有用——在 Windows 上——:

首先 --> 将 EVT_SET_FOCUS 绑定到样式方法。

第二 --> 将 fg 和 bg 颜色重置为您的原始设计。

Python代码:

button_1.Bind(wx.EVT_SET_FOCUS, focus_without_border)
def focus_without_border(evt=None):
    element = evt.GetEventObject()
    element.SetForegroundColour( wx.Colour( 241, 241, 241 ) )
    element.SetBackgroundColour( wx.Colour( 40, 41, 42 ) )
于 2021-04-08T09:38:43.003 回答