【问题标题】:How can I replace the SearchBar icon in a Xamarin.Forms custom renderer for GTK?如何替换 GTK 的 Xamarin.Forms 自定义渲染器中的 SearchBar 图标?
【发布时间】:2020-07-02 20:24:59
【问题描述】:

我正在开发一个包含 GTK 构建的 Xamarin 项目。我正在尝试为许多控件创建自定义渲染器,但在查找、访问和更改控件的属性时遇到了麻烦。例如,我想将 SearchBar 控件的“放大镜”图标替换为更类似于 Android 平台上的默认图标。

我已经创建了自定义渲染器:

namespace MyProject.GTK.CustomRenderers
{
    public class CustomSearchBarRenderer : Xamarin.Forms.Platform.GTK.Renderers.SearchBarRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<SearchBar> e)
        {
            base.OnElementChanged(e);
            var searchBar = Control;
            // How do I replace the image?
        }
    }
}

但是从那里我不知所措,因为几乎没有关于 GTK 的自定义渲染器的资源。我尝试查看 GTK.Renderers.SearchBarRenderer 以查看其派生的类是否包含任何有用的属性或方法,并尝试在 GTK 文档和 Xamarin.Forms.GTK 包的存储库中找到有意义的内容,无济于事。我只是不确定如何理解此版本中控件的内部工作原理,所以我什至无法弄清楚我应该寻找什么。对此或任何 GTK 特定自定义渲染器工作的任何指针或资源将不胜感激。

【问题讨论】:

    标签: xamarin xamarin.forms gtk custom-renderer


    【解决方案1】:

    您可以查看Xamarin Forms GTK

    SearchBar 是通过使用名为 SearchEntry 的元素实现的,该元素使用 ImageButton 并且图标由以下代码设置

    _searchButton.ImageWidget.Pixbuf = RenderIcon("gtk-find", IconSize.SmallToolbar, null); // Search icon
    

    参考

    这应该可以帮助您开始修改,如果您可以在自定义渲染器中访问 SearchEntry,则可以更改图标,否则您将不得不创建自己的搜索栏,这需要付出很多努力。

    【讨论】:

    • 好的,我会看看这个并尽快更新。非常感谢您尝试为我澄清这一点。
    • 所以我一直在学习有关自定义渲染器的更多信息,我可以看到 SearchEntry 中所有属性的设置位置,但看起来 SearchEntry 没有访问 _searchButton.ImageWidget 的方法,而 _searchButton 是私人的。我认为我无法在 SearchEntry 中访问此属性是否正确,或者是否有可能解决此问题?
    • 是的。这就是为什么我说if you can get access to SearchEntry in your custom renderer you can change icon, otherwise you will have to create your own search bar,尝试在 Github 上发布问题,GTK 团队中的某个人可能会提供帮助。明天我会尝试更深入地研究。
    • 我会这样做的。我非常感谢您的意见。我还开始考虑创建自定义控件,以防我不得不走这条路。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    相关资源
    最近更新 更多