private void UpdateItemsSource()
        {
            var font = string.IsNullOrEmpty(Element.FontFamily) ?
                       Font.SystemFontOfSize(Element.FontSize) :
                       Font.OfSize(Element.FontFamily, Element.FontSize);
            var nativeFont = font.ToUIFont();

            Control.Model = new MyDataModel(Element.ItemsSource, row =>
            {
                Element.SelectedIndex = row;
            }, nativeFont);
        }
Ejemplo n.º 2
0
        public override object ConvertFromInvariantString(string value)
        {
            // string should be formatted as "[name],[attributes],[size]" there may be multiple attributes, e.g. "Georgia, Bold, Italic, 42"
            if (value != null)
            {
                // trim because mono implements Enum.Parse incorrectly and fails to trim correctly.
                List <string> parts = value.Split(',').Select(s => s.Trim()).ToList();

                string    name      = null;
                var       bold      = false;
                var       italic    = false;
                double    size      = -1;
                NamedSize namedSize = 0;

                // check if last is a size
                string last = parts.Last();

                double    trySize;
                NamedSize tryNamedSize;
                if (double.TryParse(last, NumberStyles.Number, CultureInfo.InvariantCulture, out trySize))
                {
                    size = trySize;
                    parts.RemoveAt(parts.Count - 1);
                }
                else if (Enum.TryParse(last, out tryNamedSize))
                {
                    namedSize = tryNamedSize;
                    parts.RemoveAt(parts.Count - 1);
                }

                // check if first is a name
                foreach (string part in parts)
                {
                    FontAttributes tryAttibute;
                    if (Enum.TryParse(part, out tryAttibute))
                    {
                        // they did not provide a font name
                        if (tryAttibute == FontAttributes.Bold)
                        {
                            bold = true;
                        }
                        else if (tryAttibute == FontAttributes.Italic)
                        {
                            italic = true;
                        }
                    }
                    else
                    {
                        // they may have provided a font name
                        if (name != null)
                        {
                            throw new InvalidOperationException(string.Format("Cannot convert \"{0}\" into {1}", value, typeof(Font)));
                        }

                        name = part;
                    }
                }

                FontAttributes attributes = 0;
                if (bold)
                {
                    attributes = attributes | FontAttributes.Bold;
                }
                if (italic)
                {
                    attributes = attributes | FontAttributes.Italic;
                }
                if (size == -1 && namedSize == 0)
                {
                    namedSize = NamedSize.Medium;
                }

                if (name != null)
                {
                    if (size == -1)
                    {
                        return(Font.OfSize(name, namedSize).WithAttributes(attributes));
                    }
                    return(Font.OfSize(name, size).WithAttributes(attributes));
                }
                if (size == -1)
                {
                    return(Font.SystemFontOfSize(namedSize, attributes));
                }
                return(Font.SystemFontOfSize(size, attributes));
            }

            throw new InvalidOperationException(string.Format("Cannot convert \"{0}\" into {1}", value, typeof(Font)));
        }