public object Convert (object [] values, Type targetType, object parameter, CultureInfo culture)
		{
			try {
				double header_width = (double)values [0];
				double width = (double)values [1];
				double height = (double)values [2];
				double visible_line_width;
				if (parameter is double)
					visible_line_width = (double)parameter;
				else {
					string parameter_string = parameter as string;
					if (parameter == null)
						return DependencyProperty.UnsetValue;
					visible_line_width = double.Parse (parameter_string);
				}
				Grid grid = new Grid ();
				grid.Height = height;
				grid.Width = width;
				ColumnDefinition column_definition = new ColumnDefinition ();
				column_definition.Width = new GridLength (visible_line_width);
				grid.ColumnDefinitions.Add (column_definition);
				column_definition = new ColumnDefinition ();
				column_definition.Width = new GridLength (header_width);
				grid.ColumnDefinitions.Add (column_definition);
				grid.ColumnDefinitions.Add (new ColumnDefinition ());
				RowDefinition row_definition = new RowDefinition ();
				row_definition.Height = new GridLength (width);
				grid.RowDefinitions.Add (row_definition);
				grid.RowDefinitions.Add (new RowDefinition ());
				Rectangle rectangle = new Rectangle ();
				rectangle.Fill = Brushes.Black;
				Grid.SetRowSpan (rectangle, 2);
				grid.Children.Add (rectangle);
				rectangle = new Rectangle ();
				rectangle.Fill = Brushes.Black;
				Grid.SetColumn (rectangle, 1);
				Grid.SetRow (rectangle, 1);
				grid.Children.Add (rectangle);
				rectangle = new Rectangle ();
				rectangle.Fill = Brushes.Black;
				Grid.SetColumn (rectangle, 2);
				Grid.SetRowSpan (rectangle, 2);
				grid.Children.Add (rectangle);
				return new VisualBrush (grid);
			} catch {
				return DependencyProperty.UnsetValue;
			}
		}
		static RowDefinition ()
		{
			Auto = new RowDefinition { Height = GridLength.Auto };
			Star = new RowDefinition { Height = GridLength.Star };
		}