是否可以从非主类访问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];
}
}
我现在想做什么 - 我想为每个这样的项目创建一个子类(或者它所谓的任何子类),并为它定义它的特定空隙。
在我的游戏中,对于大多数操作,当您点击某些内容时,您会收到文本和声音文件。此外,某些图像\对象的可见性有时会发生变化。
因此,单独的项目类和空白的示例可以是:
class Towel: classItem
{
void MouseEnter_ExamineItem()
{
lblTextOutput.Content=Towel.ItemExamineText;
Towel.ItemExamineVoice.Play();
}
void MouseEnter_UseItem()
{
lblTextOutput.Content=Towel.ItemUseText;
Towel.ItemUseVoice.Play();
}
}
那么,我想在那些空洞中使用哪些线条,
有一个标签&#34; lblTextOutput&#34;用于显示相关文本。
lblTextOutput.Content="You took an item";
有很多声音文件,我通常希望每个空间播放其中一个。
sndYouTookAnItem.Play();
并且有视觉上的变化。例如:
imgBigBeautifulItem.Visibility=Visibility.Hidden;
所有xaml元素都在名为&#34; MainWindow.xaml&#34;的文件中。
但是,我没有找到从类&#34; classItem&#34;中访问xaml元素的方法。或&#34; classTowel&#34;。我尝试使用
MainWindow.lblTextOutput="BLAHBLAH"
但编译器仍然没有看到它们。怎么解决这个问题?或者,如果这种方法不正确,那么如何做得更好?
谢谢你, 叶甫盖尼