繁体   English   中英

如何更改Xamarin Studio中GUI设计器生成的字段的访问级别

[英]How can I change access level of fields generated by GUI designer in Xamarin Studio

我正在使用Xamarin Studio在Gtk#中编写代码。 当我在其中创建一个新窗口和一个TreeView时,访问级别将是私有的。 我想在其他类中使用它(TreeView),所以我想将访问级别更改为内部,但我找不到如何实现。 在此先感谢您的帮助。 这是我想要由GUI设计者更改的代码(不在代码内部写入,因为它将被GUI设计器覆盖......)

    // This file has been generated by the GUI designer. Do not modify.
namespace XX_xxxx
{
    public partial class Settings
    {
        private global::Gtk.VBox vbox1;

        private global::Gtk.ScrolledWindow GtkScrolledWindow;

        private global::Gtk.TreeView settingsTreeView;

        private global::Gtk.HBox hbox1;

        private global::Gtk.ToggleButton saveAndCloseButton;

        private global::Gtk.ToggleButton closeButton;

        protected virtual void Build ()
        {

这是我想要使用的地方(在我使用Settings类的实例的其他类中): settings.settingsTreeView.Model = settingsListStore;

错误消息是:

Error CS0122: `XX_xxxxx.Settings.settingsTreeView' is inaccessible 
    due to its protection level (CS0122) (XX_xxxx_GUI)

我在Xamarin论坛得到了这个答案:

支持的方法是从.designer.cs文件中删除该属性并将其放在主.cs文件中。 然后从声明中删除[DesignerGenerated]属性。

设计器中的代码生成将识别[Outlet]存在于实际的.cs文件中,并且不会将其放在.designer.cs文件中。 完成此操作后,您可以根据需要添加公共/内部修改器。

通常,控件被标记为私有,以阻止其他模块中的代码直接进入和更改类的属性。 好消息是,还有另一种(恕我直言)更好的方式来做你想做的事情。 由于生成的类被标记为partial,因此您可以使用非生成的部分Settings类,以及您为其他类与UI交互所需的内部方法添加的内容。

这种方法通常被认为是优越的,因为它允许您控制其他类如何与Settings类的私有成员(控件)交互。 所以你可以添加这样的方法:

public partial class Settings
{ 
    internal void SetModel(ModelType model)
    {
        // Check if valid model and throw some type of argument exception if not
        settingsTreeView.Model = model;
    }
}

然后像这样调用它:

settings.SetModel(settingsListStore);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM