Windows Phone 8.1 AppBarButton значок с 2 рядами текста

Я хотел бы знать, как сделать так, чтобы AppBarButton Icon содержал 2 строки текста. Я хочу сделать это как в календаре Windows:

образ

2 ответа

Решение

AppBarButton не отображает текст или произвольный Xaml в своем значке. Это должен быть символ из шрифта, растрового изображения или пути. Для отображения календаря вам лучше всего использовать растровое изображение.

Поскольку вы, вероятно, не хотите предварительно создавать значки 366, вы можете использовать RenderTargetBitmap, чтобы создавать их на лету. Предполагая, что "ButtonImageMaster" - это фрагмент Xaml с указанием дня и месяца, а calendarButton - это AppBarButton:

RenderTargetBitmap rtb = new RenderTargetBitmap();
await rtb.RenderAsync(ButtonImageMaster);
IBuffer pixelBuffer = await rtb.GetPixelsAsync();
string fileName = "calIcon.png";
StorageFile calIconFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(fileName,CreationCollisionOption.ReplaceExisting);
using (IRandomAccessStream stream = await calIconFile.OpenAsync(FileAccessMode.ReadWrite))
{
    BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
    encoder.SetPixelData(
          BitmapPixelFormat.Bgra8,
          BitmapAlphaMode.Straight,
          (uint)rtb.PixelWidth,
          (uint)rtb.PixelHeight,
          DisplayInformation.GetForCurrentView().LogicalDpi,
          DisplayInformation.GetForCurrentView().LogicalDpi,
          pixelBuffer.ToArray());

    await encoder.FlushAsync(); 
}

BitmapIcon icon = new BitmapIcon();
icon.UriSource = new Uri("ms-appdata:///temp/"+fileName);
calendarButton.Icon = icon;

На WP 8.1 Silverlight вы можете использоватьWriteableBitmap(FrameworkElement element, Transform transform) конструктор WriteableBitmap (который получен из ImageSource) создать "снимок экрана с отображаемым в памяти элементом фреймворка". Затем вы можете установить его в Bitmap Icon.

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