1

我正在使用 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)
4

2 回答 2

2

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

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

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

于 2015-06-15T14:06:25.380 回答
1

通常,控件被标记为私有,以阻止其他模块中的代码直接访问和更改类的属性。好消息是,还有另一种(恕我直言)更好的方法来做你想做的事情。由于生成的类被标记为部分,因此您可以将未生成的部分设置类与您添加的其他类需要与 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);
于 2015-03-31T16:36:24.263 回答