示例#1
0
文件: Vik.cs 项目: Nvirjskly/Pamya
 public void Add(LinkSpan lb)
 {
     this.Inlines.Add(lb);
 }
示例#2
0
文件: Vik.cs 项目: Nvirjskly/Pamya
        private LinkSpan __RecContentMarkupToWPF(XElement root)
        {
            LinkSpan ret = null; //the returnee

            //ALIASES
            //<word>value</word> is alias for <link Target="value" Nest="2"><text>value</text></link>
            if (root.Name.LocalName == "word")
            {
                var textEl = root;
                string linkVal = (root.Attribute("Target") == null ? root.Value : root.Attribute("Target").Value);
                textEl.Name = XName.Get("text");
                root = new XElement("link");
                root.SetAttributeValue("Target", linkVal);
                root.SetAttributeValue("Nest", "2");
                root.Add(textEl);

            }
            else if (root.Name.LocalName == "h1")
            //<h1>value</h1> is alias for <paragraph><text FontSize="32">value</text><br /></paragraph>
            {
                var val = root.Value;
                var attributes = root.Attributes();
                root = new XElement("paragraph");
                var valText = new XElement("text", val);
                valText.SetAttributeValue("FontSize", "32");
                //root.Value = val + "<br />";
                foreach (var attribute in attributes)
                    valText.SetAttributeValue(attribute.Name, attribute.Value);
                root.Add(valText);//, new XElement("br"));
            }
            else if (root.Name.LocalName == "h2")
            //<h2>value</h2> is alias for <paragraph><br /><text FontSize="24">value</text><br /></paragraph>
            {
                var val = root.Value;
                var attributes = root.Attributes();
                root = new XElement("paragraph");
                var valText = new XElement("text", val);
                valText.SetAttributeValue("FontSize", "24");
                //root.Value = val + "<br />";
                foreach (var attribute in attributes)
                    valText.SetAttributeValue(attribute.Name, attribute.Value);
                root.Add(new XElement("br"), valText, new XElement("br"));
            }

            //GET GLOBAL FORMATTING ATTRIBUTES
            int fontSize = -1;
            if (root.Attribute("FontSize") != null)
            {
                fontSize = Int32.Parse(root.Attribute("FontSize").Value);
            }
            Brush colour = null;
            if (root.Attribute("Colour") != null)
            {
                colour = (Brush)new BrushConverter().ConvertFromString(root.Attribute("Colour").Value);
            }

            switch (root.Name.LocalName)
            {

                case "paragraph":

                    var paragraphPanel = new LinkSpan();

                    //foreach (var l in root.Elements())
                    //{ paragraphPanel.Inlines.Add(__RecContentMarkupToWPF(l)); }
                    paragraphPanel.Inlines.AddRange(__DeNode(root));

                    ret = paragraphPanel;
                    break;
                case "link":
                    var linkInline = new LinkSpan();
                    if (root.Attribute("Target") == null)
                    {
                        linkInline.Link = new Link { LinksTo = null };
                        //foreach (var l in root.Elements())
                        //{ linkInline.Add(__RecContentMarkupToWPF(l)); }
                        linkInline.Inlines.AddRange(__DeNode(root));
                    }
                    else
                    {
                        int nest = 0;
                        if (root.Attribute("Nest") != null)
                            nest = Int32.Parse(root.Attribute("Nest").Value);

                        //make border
                        Border blockBorder = new Border();
                        blockBorder.BorderThickness = new Thickness(1);
                        blockBorder.Background = Brushes.Black;

                        LinkBlock MarginBlock = new LinkBlock();

                        if (nest == 0)
                            MarginBlock.Background = SENTENCE_BRUSH_COLOUR; //This should change
                        else if (nest == 1)
                            MarginBlock.Background = FRAGMENT_BRUSH_COLOUR;
                        else if (nest == 2)
                            MarginBlock.Background = WORD_BRUSH_COLOUR;
                        MarginBlock.MouseLeftButtonUp += new MouseButtonEventHandler(_OnClickBlock);
                        MarginBlock.Link = new Link { LinksTo = root.Attribute("Target").Value };
                        SetPadding(MarginBlock, 5);

                        MarginBlock.VerticalAlignment = System.Windows.VerticalAlignment.Center;

                        //foreach (var l in root.Elements())
                        //{ MarginBlock.Inlines.Add(__RecContentMarkupToWPF(l)); }
                        MarginBlock.Inlines.AddRange(__DeNode(root));
                        blockBorder.Child = MarginBlock;
                        linkInline.Add(blockBorder);
                    }

                    ret = linkInline;
                    break;
                case "text":
                    var textLinkSpan = new LinkSpan();
                    textLinkSpan.FontFamily = new FontFamily("ClearType");
                    textLinkSpan.FontSize = 16d;
                    if (root.Value != null)
                        textLinkSpan.Add(new Run { Text = root.Value });
                    textLinkSpan.Link = new Link { LinksTo = (root.Attribute("WordLinksTo") == null ? null : root.Attribute("WordLinksTo").Value) };
                    textLinkSpan.BaselineAlignment = BaselineAlignment.Center;
                    ret = textLinkSpan;
                    break;
                case "img":
                    var imgLinkSpan = new LinkSpan();
                    Image img = new Image();
                    img.ClipToBounds = true;
                    img.Stretch = Stretch.Uniform;
                    SetMargin(img, 20);
                    if (File.Exists(PamyaDeck.Instance.CurrentDeckFolder + @"\" + root.Value))
                        img.Source = new BitmapImage(new Uri(PamyaDeck.Instance.CurrentDeckFolder + @"\" + root.Value));
                    imgLinkSpan.Add(img);
                    ret = imgLinkSpan;
                    break;
                case "br":
                    var seperatorLinkSpan = new LinkSpan();
                    seperatorLinkSpan.Add(new LineBreak());
                    ret = seperatorLinkSpan;
                    break;
                default: return null;
            }

            //set Global attributes
            if (fontSize > -1)
                ret.FontSize = fontSize;
            if (colour != null)
                ret.Foreground = colour;

            return ret;
        }