C# 我正在尝试加载xaml并从应用程序运行其动画

C# 我正在尝试加载xaml并从应用程序运行其动画,c#,wpf,xaml,C#,Wpf,Xaml,我正在开发一个wpf应用程序,它可以加载几个用blend制作的xaml文件。我的应用程序必须单独运行xaml的动画。我已经进行了解析,创建了usercontrol,创建了stroryboards,并将xaml放入usercontrol中。我的问题是我无法运行从xaml获取并添加到userControl的动画 此外,我放置代码: private void FillMenuWindow(ScreeningArea area) { string lData = null;

我正在开发一个wpf应用程序,它可以加载几个用blend制作的xaml文件。我的应用程序必须单独运行xaml的动画。我已经进行了解析,创建了usercontrol,创建了stroryboards,并将xaml放入usercontrol中。我的问题是我无法运行从xaml获取并添加到userControl的动画

此外,我放置代码:

private void FillMenuWindow(ScreeningArea area) 
    {
        string lData = null;
        bool isCanvasAdded = false;
        UserControl menuUserControl = new UserControl();
        Canvas XAMLWindowCanvas = new Canvas();
        XDocument xmlFile = new XDocument();
        IEnumerable<XElement> elementList;
        MemoryStream stream = null;
        int initSide = 0;
        menuStoryboardList.Clear();
        if (area.CurrentItem != null)
        {
            SimpleDelegate resumedDelegate = delegate
            {
                string nameCounter;
                string myStream;
                string mystrName;
                xmlFile = XDocument.Load(VideoMenuSystem.DataPath + "\\" + area.CurrentItem.ItemName + ".xaml");                    
                StreamReader menuReader = new StreamReader(VideoMenuSystem.DataPath + "\\" + area.CurrentItem.ItemName + ".xaml");

                myStream = menuReader.ReadToEnd();
                TextToFile(myStream, VideoMenuSystem.DataPath + "\\" + "xamlFile.txt",false);
                menuUserControl = new UserControl();
                //this.RegisterName("Test", menuUserControl);
                elementList = xmlFile.Root.Descendants();                    

                foreach (XElement el in elementList)
                {
                    mystrName = el.Name.LocalName;
                    switch (mystrName)
                    {
                        case "Storyboard":
                            lData = el.ToString();
                            TextToFile(lData, VideoMenuSystem.DataPath + "\\" + "storyBoardFile.txt", true);
                            stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(lData));
                            myStoryboard.Children.Add(XamlReader.Load(stream) as Storyboard);                                
                            break;
                        case "Canvas":
                            lData = el.ToString();
                            if (lData != null)
                            {
                                stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(lData));
                                XAMLWindowCanvas.Children.Add(XamlReader.Load(stream) as UIElement);                                    
                                foreach (ScreeningArea sa in Screens)
                                {
                                    if (sa == area)
                                    {
                                        initSide = menuSize.Width + screenSeparator;
                                        break;
                                    }
                                }
                                XAMLWindowCanvas.Margin = new Thickness(left, 0, 0, 0);                                    
                                menuUserControl.Content = XAMLWindowCanvas;
                                left += initSide;
                            }
                            isCanvasAdded = true;
                            break;
                    }
                    if (isCanvasAdded)
                        break;
                }
                nameCounter = DateTime.Now.Ticks.ToString();
                String myNameCounter = nameCounter.Substring(nameCounter.Length - 10);
                menuUserControl.Resources.Add("SB_" + myNameCounter, myStoryboard);
                menuStoryboardList.Add(myStoryboard);
                playbackArea.Children.Add(menuUserControl);
                playbackArea.Loaded += new RoutedEventHandler(fireAnimation);                    
            };
            Dispatcher.BeginInvoke(resumedDelegate);
        }
    }
private void FillMenuWindow(筛选区域)
{
字符串lData=null;
bool isCanvasAdded=false;
UserControl menuUserControl=新建UserControl();
Canvas XAMLWindowCanvas=新画布();
XDocument xmlFile=新XDocument();
IEnumerable元素列表;
MemoryStream stream=null;
int initSide=0;
menuStoryboardList.Clear();
如果(area.CurrentItem!=null)
{
SimpleDelegate ResumeDelegate=委托
{
字符串名称计数器;
字符串myStream;
字符串mystrName;
xmlFile=XDocument.Load(VideoMenuSystem.DataPath+“\\”+area.CurrentItem.ItemName+“.xaml”);
StreamReader menuReader=新的StreamReader(VideoMenuSystem.DataPath+“\\”+area.CurrentItem.ItemName+“.xaml”);
myStream=menuReader.ReadToEnd();
TextToFile(myStream,videomenussystem.DataPath+“\\”+“xamlFile.txt”,false);
menuUserControl=新用户控件();
//此注册表名(“测试”,菜单控件);
elementList=xmlFile.Root.subjects();
foreach(元素列表中的元素el)
{
mystrName=el.Name.LocalName;
交换机(mystrName)
{
案例“情节提要”:
lData=el.ToString();
TextToFile(lData,videomenussystem.DataPath+“\\”+“storyBoardFile.txt”,true);
stream=newmemoryStream(System.Text.Encoding.UTF8.GetBytes(lData));
myStoryboard.Children.Add(XamlReader.Load(stream)作为故事板);
打破
案例“画布”:
lData=el.ToString();
如果(lData!=null)
{
stream=newmemoryStream(System.Text.Encoding.UTF8.GetBytes(lData));
XAMLWindowCanvas.Children.Add(XamlReader.Load(stream)作为UIElement);
foreach(屏幕中的屏幕区域sa)
{
如果(sa==面积)
{
initSide=menuSize.Width+屏幕分隔符;
打破
}
}
XAMLWindowCanvas.Margin=新厚度(左、0、0、0);
menuUserControl.Content=XAMLWindowCanvas;
左+=左侧;
}
isCanvasAdded=true;
打破
}
如果(已添加)
打破
}
nameCounter=DateTime.Now.Ticks.ToString();
字符串myNameCounter=nameCounter.Substring(nameCounter.Length-10);
menuUserControl.Resources.Add(“SB_”+mynameccounter,myStoryboard);
menuStoryboardList.Add(myStoryboard);
playbackArea.Children.Add(menuUserControl);
playbackArea.Loaded+=新的RoutedEventHandler(fireAnimation);
};
调度员开始通话(恢复通话);
}
}

我发现问题在于,当我向UserControl添加情节提要和画布时,它们不在同一范围内,这就是为什么情节提要找不到要设置动画的对象的原因。我重新编写代码,试图订购和修复它,但没有成功!这是新代码:

private UserControl ReadMenuObj(ScreeningArea area)
{
    bool isCanvasAdded = false;
    int initSide = 0;
    string myStream;
    string mystrName;
    string nameCounter;
    string lData = null;
    UserControl localUC = new UserControl();
    XDocument xmlFile = new XDocument();
    Storyboard localSB = new Storyboard();
    Canvas XAMLWindowCanvas = new Canvas();
    IEnumerable<XElement> elementList;
    StreamReader menuReader;
    MemoryStream stream = null;

    xmlFile = XDocument.Load(VideoMenuSystem.DataPath + "\\" + area.CurrentItem.ItemName + ".xaml");
    menuReader = new StreamReader(VideoMenuSystem.DataPath + "\\" + area.CurrentItem.ItemName + ".xaml");

    myStream = menuReader.ReadToEnd();
    TextToFile(myStream, VideoMenuSystem.DataPath + "\\" + "xamlFile.txt", false);
    elementList = xmlFile.Root.Descendants();

    myStoryboard = new Storyboard();
    foreach (XElement el in elementList)
    {
        mystrName = el.Name.LocalName;
        switch (mystrName)
        {
            case "Storyboard":
                lData = el.ToString();
                TextToFile(lData, VideoMenuSystem.DataPath + "\\" + "storyBoardFile.txt", true);
                stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(lData));
                localSB = XamlReader.Load(stream) as Storyboard;
                for (int i = 0; i < localSB.Children.Count; i++)
                {
                    Timeline tm = (Timeline)localSB.Children.ElementAt(i);
                    myStoryboard.Children.Add(tm);
                }
                //myStoryboard.Children.Add(localSB);
                break;
            case "Canvas":
                lData = el.ToString();
                XAMLWindowCanvas = new Canvas();
                if (lData != null)
                {
                    TextToFile(lData, VideoMenuSystem.DataPath + "\\" + "xamlFile2.txt", true);
                    stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(lData));
                    DependencyObject rootObject = XamlReader.Load(stream) as DependencyObject;
                    XAMLWindowCanvas = rootObject as Canvas;
                    //XAMLWindowCanvas.Children.Add(XamlReader.Load(stream) as UIElement);
                    foreach (ScreeningArea sa in Screens)
                    {
                        if (sa == area)
                        {
                            initSide = menuSize.Width + screenSeparator;
                            break;
                        }
                    }
                    XAMLWindowCanvas.Margin = new Thickness(left, 0, 0, 0);
                    //XAMLWindowCanvas.Loaded += new RoutedEventHandler(fireAnimation);
                    XAMLWindowCanvas.MouseDown += new MouseButtonEventHandler(fireAnimation);
                    localUC.Content = XAMLWindowCanvas;
                    int cnvConut = XAMLWindowCanvas.Children.Count;
                    left += initSide;
                }
                isCanvasAdded = true;
                break;
        }
        if (isCanvasAdded)
            break;
    }
    menuStoryboardList.Add(myStoryboard);
    nameCounter = DateTime.Now.Ticks.ToString();
    String myNameCounter = nameCounter.Substring(nameCounter.Length - 10);
    localUC.Resources.Add( "SB_" + myNameCounter, myStoryboard);
    Canvas cnv = (Canvas)localUC.FindName("Combo_3");
    Storyboard storyboard = (Storyboard)localUC.Resources["CombonAnim"];
    return localUC;
}
private UserControl ReadMenuObj(屏幕区域)
{
bool isCanvasAdded=false;
int initSide=0;
字符串myStream;
字符串mystrName;
字符串名称计数器;
字符串lData=null;
UserControl localUC=new UserControl();
XDocument xmlFile=新XDocument();
情节提要localSB=新情节提要();
Canvas XAMLWindowCanvas=新画布();
IEnumerable元素列表;
StreamReader菜单阅读器;
MemoryStream stream=null;
xmlFile=XDocument.Load(VideoMenuSystem.DataPath+“\\”+area.CurrentItem.ItemName+“.xaml”);
menuReader=new StreamReader(VideoMenuSystem.DataPath+“\\”+area.CurrentItem.ItemName+”.xaml);
myStream=menuReader.ReadToEnd();
TextToFile(myStream,videomenussystem.DataPath+“\\”+“xamlFile.txt”,false);
elementList=xmlFile.Root.subjects();
myStoryboard=新故事板();
foreach(元素列表中的元素el)
{
mystrName=el.Name.LocalName;
交换机(mystrName)
{
案例“情节提要”:
lData=el.ToString();
TextToFile(lData,videomenussystem.DataPath+“\\”+“storyBoardFile.txt”,true);
stream=newmemoryStream(System.Text.Encoding.UTF8.GetBytes(lData));
localSB=XamlReader.Load(stream)作为情节提要;
for(int i=0;i