C# 从另一个类访问XAML元素

C# 从另一个类访问XAML元素,c#,wpf,class,user-interface,C#,Wpf,Class,User Interface,是否可以从非主类访问xaml控件?我知道还有其他类似的线索,但我不确定它们是否适合我的情况 以前,我只在一个主类中制作所有内容的游戏。但现在,人们建议我改变这一点,因为以我的方式,消耗了太多的资源 首先,我创建了一个Item类 class classItem { public string ItemId; public string ItemName; public Image ItemImage; public int InventoryPosition; public Visibilit

是否可以从非主类访问xaml控件?我知道还有其他类似的线索,但我不确定它们是否适合我的情况

以前,我只在一个主类中制作所有内容的游戏。但现在,人们建议我改变这一点,因为以我的方式,消耗了太多的资源

首先,我创建了一个Item类

class classItem
{
public string ItemId;
public string ItemName;
public Image ItemImage;

public int InventoryPosition;

public Visibility ItemVisibility;

public string MouseEnter_ItemExamineText;
public string MouseClick_ItemExamineText;
public MediaPlayer ItemExamineVoice;

public string MouseEnter_ItemUseText;
public string MouseClick_ItemUseText;
public MediaPlayer ItemUseVoice;        


public string MouseEnter_ItemTakeText;
public string MouseClick_ItemTakeText;
public MediaPlayer ItemTakeVoice;

public string MouseEnter_ItemOpenCloseText;
public string MouseClick_ItemOpenCloseText;
public MediaPlayer ItemOpenCloseVoice;

public string MouseEnter_ItemMergeText;
public string MouseClick_ItemMergeText;
public MediaPlayer ItemMergeVoice;


public int ItemCurrentWidth;
public int[] ItemWidthResolutions = new int[6];


public int ItemCurrentHeight;
public int[] ItemHeightResolutions = new int[6];

public Thickness ItemCurrentMargin;
public Thickness[] ItemMarginResolutions = new Thickness[6];

// Generic Pre-set

public classItem()          
{
    ItemId = "";
    ItemName = "";
    ItemImage = null;
    ItemVisibility=Visibility.Hidden;

    InventoryPosition=0;

    MouseEnter_ItemExamineText = "";
    MouseClick_ItemExamineText = "";
    ItemExamineVoice = null;

    MouseEnter_ItemUseText = "";
    MouseClick_ItemUseText = "";
    ItemUseVoice = null;

    MouseEnter_ItemTakeText = "";
    MouseClick_ItemTakeText = "";
    ItemTakeVoice = null;

    MouseEnter_ItemOpenCloseText = "";
    MouseClick_ItemOpenCloseText = "";
    ItemOpenCloseVoice = null;

    MouseEnter_ItemMergeText = "";
    MouseClick_ItemMergeText = "";
    ItemMergeVoice = null;

    ItemWidthResolutions[0] = 1;
    ItemWidthResolutions[1] = 1;
    ItemWidthResolutions[2] = 1;
    ItemWidthResolutions[3] = 1;
    ItemWidthResolutions[4] = 1;
    ItemWidthResolutions[5] = 1;
    ItemCurrentWidth = ItemWidthResolutions[0];

    ItemHeightResolutions[0] = 1;
    ItemHeightResolutions[1] = 1;
    ItemHeightResolutions[2] = 1;
    ItemHeightResolutions[3] = 1;
    ItemHeightResolutions[4] = 1;
    ItemHeightResolutions[5] = 1;
    ItemCurrentHeight = ItemHeightResolutions[0];           

    ItemMarginResolutions[0] = new Thickness(-1000,-1000,0,0);
    ItemMarginResolutions[1] = new Thickness(-1000,-1000,0,0);
    ItemMarginResolutions[2] = new Thickness(-1000,-1000,0,0);
    ItemMarginResolutions[3] = new Thickness(-1000,-1000,0,0);
    ItemMarginResolutions[4] = new Thickness(-1000,-1000,0,0);
    ItemMarginResolutions[5] = new Thickness(-1000,-1000,0,0);
    ItemCurrentMargin = ItemMarginResolutions[0];               
    }

    // Item main class      

    public classItem(string Id, string Name, Image ItemImage,
    Visibility Vis, int InventoryPosition,
    string MouseEnter_ExamineText, string MouseClick_ExamineText,
    MediaPlayer ExamineVoice,     
    string MouseEnter_UseText, string MouseClick_UseText, 
    MediaPlayer UseVoice,
    string MouseEnter_TakeText, string MouseClick_TakeText,
    MediaPlayer  TakeVoice,
    string MouseEnter_OpenCloseText, string MouseClick_OpenCloseText,
    MediaPlayer OpenCloseVoice,
    string MouseEnter_MergeText, string MouseClick_MergeText,
    MediaPlayer MergeVoice, 
    int[] WidthResolutions, int[] HeightResolutions, 
    Thickness[]  MarginResolutions)

     {
     this.ItemId = Id;
     this.ItemName = Name;
     this.ItemImage = ItemImage;
     this.ItemVisibility = Vis;

     this.InventoryPosition = InventoryPosition;

     this.MouseEnter_ItemExamineText = MouseEnter_ExamineText;
     this.MouseClick_ItemExamineText = MouseClick_ExamineText;
     this.ItemExamineVoice = ExamineVoice;


     this.MouseEnter_ItemUseText  = MouseEnter_UseText;
     this.MouseClick_ItemUseText  = MouseClick_UseText;
     this.ItemUseVoice = UseVoice;      


     this.MouseEnter_ItemTakeText = MouseEnter_TakeText;
     this.MouseClick_ItemTakeText = MouseClick_TakeText;
     this.ItemTakeVoice = TakeVoice;


     this.MouseEnter_ItemOpenCloseText = MouseEnter_OpenCloseText;
     this.MouseClick_ItemOpenCloseText = MouseClick_OpenCloseText;
     this.ItemOpenCloseVoice = OpenCloseVoice;


     this.MouseEnter_ItemMergeText = MouseEnter_ItemMergeText;
     this.MouseClick_ItemMergeText = MouseClick_ItemMergeText;
     this.ItemMergeVoice = ItemMergeVoice;


     for (int i=0; i<=5; i++)
     {
        this.ItemWidthResolutions[i]=WidthResolutions[i];
        this.ItemHeightResolutions[i]=HeightResolutions[i];
        this.ItemMarginResolutions[i]=MarginResolutions[i];
     }

     this.ItemCurrentWidth = this.ItemWidthResolutions[0];
     this.ItemCurrentHeight = this.ItemHeightResolutions[0];
     this.ItemCurrentMargin = this.ItemMarginResolutions[0];       
     }
}
那么,我想在这些空隙中使用什么样的线

有一个标签“lblTextOutput”用于显示相关文本

lblTextOutput.Content="You took an item";
有很多声音文件,我通常想在每个空格中播放一个

sndYouTookAnItem.Play();
还有视觉上的变化。例如:

imgBigBeautifulItem.Visibility=Visibility.Hidden;
所有xaml元素都在名为“MainWindow.xaml”的文件中

但是,我没有找到从类“classItem”或“ClassTown”访问xaml元素的方法。我试着用

MainWindow.lblTextOutput="BLAHBLAH"
但编译器仍然没有看到它们。如何解决这个问题?或者,如果这种方法不正确,如何更好地做到这一点

谢谢,,
Evgenie

您好,您能将您的代码块格式化,适当缩进,使其更可读吗?已编辑。很抱歉没有从一开始就这么做。也许像这样的东西应该添加到这个新类中?public MainWindow(){InitializeComponent();}您好,您能将代码块的格式正确地缩进以使其更可读吗?已编辑。很抱歉没有从一开始就这么做。也许像这样的东西应该添加到这个新类中?公共主窗口(){InitializeComponent();}
MainWindow.lblTextOutput="BLAHBLAH"