从另一个类访问XAML元素

时间:2017-03-23 07:29:34

标签: c# wpf class user-interface

是否可以从非主类访问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"

但编译器仍然没有看到它们。怎么解决这个问题?或者,如果这种方法不正确,那么如何做得更好?

谢谢你, 叶甫盖尼

0 个答案:

没有答案