有没有办法在OSX上完全删除wxTextCtrl对象的焦点边框?

时间:2015-09-01 17:13:56

标签: macos user-interface wxwidgets wxtextctrl

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

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

有没有可能的方法将其删除?我真的不想破解wx来源,但如果必须的话,我会这样做。

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

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

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

2 个答案:

答案 0 :(得分:1)

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

  

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

     

有没有办法禁用焦点UI对象周围的边框?

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

文件: core / textctrl.mm
Func: 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的外观,所以也许这就是为什么它没有作为wxTextCtrl API公开?或者它打破别的东西?但到目前为止,我的工作正常。另外,我的应用需要拥有自己的自定义主题,与发光边框不相符。

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

答案 1 :(得分: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 ) )