2014-10-03 5 views

답변

2

AppBarButton가 아이콘에서 텍스트 또는 임의의 XAML을 표시하지 않습니다. 글꼴, 비트 맵 또는 경로의 기호 여야합니다. 이와 같은 캘린더 디스플레이의 경우 비트 맵을 사용하는 것이 가장 좋습니다.

아마도 366 개의 아이콘을 미리 생성하고 싶지 않으므로 RenderTargetBitmap을 사용하여 즉시 만들 수 있습니다. "ButtonImageMaster"을 가정하는 것은 XAML 날과 달과 calendarButton와 스 니펫 AppBarButton입니다 :

실버, 당신은 '스크린 샷을 생성하기 위해 ( ImageSource에서 파생) WriteableBitmapWriteableBitmap(FrameworkElement element, Transform transform) 생성자를 사용할 수 있습니다 WP 8.1에
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; 
+0

Silverlight 8.1 앱에서이 기능을 사용하고 싶지만 Silverlight가 RenderTargetBitmap을 지원하지 않는 것 같습니다. 이 작업을 수행 할 수있는 다른 방법이 있습니까? –

+0

렌더링 코드가 잘 작동하지만 AppBarButton.Icon으로 표시하려고하면 http://i.imgur.com/de73cTo.png가 표시됩니다. 내가 어떻게 고칠 수 있는지 생각해? – Vil

+0

코드가 업데이트되었습니다. 전화는 BitmapIcon의 UriSource가 원시 경로가 아닌 ms- 프로토콜 URI 여야합니다. –

0

메모리 렌더링 된 프레임 워크 요소 '. 그런 다음 비트 맵 아이콘으로 설정할 수 있습니다.