Рендеринг 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
Вот некоторые предложения:
Вот соответствующие символы:
- ☑
-
- ✅
-
Не беспокойтесь о том, что они выглядят неправильно ЗДЕСЬ. Они должны, когда вы выполните вышеуказанные шаги.
Вы всегда можете взломать его, используя изображения элементов управления флажка. Вы пытались показать созданный элемент управления в пользовательском интерфейсе? т.е. добавив его на страницу? Просто чтобы посмотреть, правильно ли выполняется ваш код.
Или другое решение будет использовать символ галочки - http://www.fileformat.info/info/unicode/char/2713/index.htm
Я попытаюсь повторить эту проблему в моем тестовом приложении, так как странно, что оно не работает.