Рендеринг CheckBox в изображение для плитки

Я хочу отобразить один или несколько флажков на плитке в приложении Windows Phone. Это работает уже для TextBlocks, но с CheckBox показывает только текст CheckBox, а не сам Checkmark.

Это пример моего кода:

    public void CreateTile()
    {
        StackPanel panel = new StackPanel();
        panel.VerticalAlignment = VerticalAlignment.Top;
        panel.Margin = new Thickness(7.0, 7.0, 7.0, 0);
        panel.Width = 336;
        panel.Height = 336;
        panel.Orientation = Orientation.Vertical;

        // Create and add a CheckBox for each task
        foreach (var task in _tasks)
        {
            TextBlock textBlock = new TextBlock();
            textBlock.TextWrapping = TextWrapping.Wrap;
            textBlock.Style = App.Current.Resources["PhoneTextLargeStyle"] as Style;
            textBlock.Foreground = new SolidColorBrush(Colors.White);
            textBlock.Text = task.Text;

            CheckBox checkBox = new CheckBox();
            checkBox.IsChecked = task.IsDone;
            checkBox.Content = textBlock;

            panel.Children.Add(checkBox);
        }

        Grid layoutRoot = new Grid();
        layoutRoot.Background = new SolidColorBrush(Colors.Blue);
        layoutRoot.Width = 336;
        layoutRoot.Height = 336;
        layoutRoot.Children.Add(panel);
        layoutRoot.Measure(new Size(336, 336));
        layoutRoot.Arrange(new Rect(0, 0, 336, 336));
        layoutRoot.UpdateLayout();

        // Render grid into bitmap
        WriteableBitmap bitmap = new WriteableBitmap(336, 336);
        bitmap.Render(layoutRoot, null);
        bitmap.Invalidate();

        // Save background image for tile to isolated storage
        Uri backgroundImage = TileHelper.SaveTileImage(bitmap);
    }

Если я создам плитку с фоновым изображением, созданным описанным выше способом, плитка будет выглядеть так:

Как видите, текст отображается, но перед текстом нет галочки / квадрата.

2 ответа

Решение

Мне лично нравится использовать Segoe UI Symbol в качестве Font Family в таких ситуациях. Это дает мне гибкость в использовании Text а также Symbols вместе, не слишком возиться с кодом / изображениями. У SUS есть отличные современные иконки (или персонажи, если вы их называете), которые очень похожи на Metroish.

Просто откройте Charmap (Win + R и введите charmap) и в меню "Выбор шрифта" -> "Segoe UI Symbol". Теперь вы можете выбрать любой понравившийся вам символ и вставить его в редактор Visual Studio. Да, это работает! Символ может не отображаться должным образом в самом редакторе, но при Runtime

Вот некоторые предложения: Некоторые CheckBoxes

Вот соответствующие символы:

Не беспокойтесь о том, что они выглядят неправильно ЗДЕСЬ. Они должны, когда вы выполните вышеуказанные шаги.

Вы всегда можете взломать его, используя изображения элементов управления флажка. Вы пытались показать созданный элемент управления в пользовательском интерфейсе? т.е. добавив его на страницу? Просто чтобы посмотреть, правильно ли выполняется ваш код.

Или другое решение будет использовать символ галочки - http://www.fileformat.info/info/unicode/char/2713/index.htm

Я попытаюсь повторить эту проблему в моем тестовом приложении, так как странно, что оно не работает.

Другие вопросы по тегам