전화 프로젝트의 어셈블리 이름입니다 가정 할 Conveter
을 사용 PhoneApp1
다음 코드를 변환 만들기 :
using System;
namespace PhoneApp1.Converters
{
using System.Globalization;
using System.IO;
using System.Windows.Data;
using System.Windows.Media.Imaging;
public class ByteToImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var data = value as byte[];
if (data != null)
{
using(var stream = new MemoryStream(data))
{
var bitmapImage = new BitmapImage();
bitmapImage.SetSource(stream);
return bitmapImage;
}
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
당신의 XAML에서 다음 네임 스페이스 선언을 사용합니다 :
xmlns:converters="clr-namespace:PhoneApp1.Converters"
xaml :뒤에 0
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<Grid.Resources>
<converters:ByteToImageConverter x:Key="ByteToImageConverter" />
</Grid.Resources>
<phone:LongListSelector x:Name="lstTiles">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<Grid Margin="5,5,5,5" Background="{StaticResource PhoneAccentBrush}">
<Grid VerticalAlignment="Center" HorizontalAlignment="Center">
<Image Height="70" Width="70" Margin="10,0,0,0" Source="{Binding Image, Converter={StaticResource ByteToImageConverter}}">
</Image>
</Grid>
<StackPanel VerticalAlignment="Bottom" HorizontalAlignment="Center">
<TextBlock Margin="5,5,5,5" TextTrimming="WordEllipsis" TextWrapping="NoWrap" Text="{Binding Title}"></TextBlock>
</StackPanel>
</Grid>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
</Grid>
코드와 모델
public partial class MainPage : PhoneApplicationPage
{
// Constructor
public MainPage()
{
InitializeComponent();
this.BindTiles();
}
private void BindTiles()
{
var sampleRandomImageBytes = Convert.FromBase64String(@"iVBORw0KGgoAAAANSUhEUgAAAGgAAABbCAYAAACf8sCiAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADeSURBVHhe7dExAQAwDMCgmVj9O21tcORAAe/PbFwF4QrCFYQrCFcQriBcQbiCcAXhCsIVhCsIVxCuIFxBuIJwBeEKwhWEKwhXEK4gXEG4gnAF4QrCFYQrCFcQriBcQbiCcAXhCsIVhCsIVxCuIFxBuIJwBeEKwhWEKwhXEK4gXEG4gnAF4QrCFYQrCFcQriBcQbiCcAXhCsIVhCsIVxCuIFxBuIJwBeEKwhWEKwhXEK4gXEG4gnAF4QrCFYQrCFcQriBcQbiCcAXhCsIVhCsIVxCuIFxBuIJwBeEKos0e0/44s5MWYKUAAAAASUVORK5CYII=");
var data = new[]
{
new AppTitle { Title = "Tile 1", Image = sampleRandomImageBytes }, new AppTitle { Title = "Tile 2", Image = sampleRandomImageBytes },
new AppTitle { Title = "Tile 3", Image = sampleRandomImageBytes }, new AppTitle { Title = "Tile 4", Image = sampleRandomImageBytes }
};
lstTiles.ItemsSource = data;
}
}
public class AppTitle
{
public string Title { get; set; }
public byte[] Image { get; set; }
}
감사합니다. 나는 이것을 내 프로젝트에 포함 시켰고 xaml 페이지 xmlns : local = "clr-namespace : XYZ.Framework"와 그리드 리소스의 상단에 추가했습니다. 하지만 프로젝트를 실행할 때 다음 오류가 발생합니다. Message = 'XYZ.Framework.ByteToImageConverter'유형의 인스턴스를 만들 수 없습니다. 내가 여기서 뭔가를 놓치고 있니? –
네임 스페이스 문제가 발생하면서 네임 스페이스를 포함하도록 질문이 업데이트되었습니다. 어셈블리 이름으로 PhoneApp1을 대체하고 어셈블리 이름이 무엇인지 알아 내고 솔루션 탐색기에서 프로젝트로 이동 한 다음 마우스 오른쪽 단추를 클릭하여 속성과 어셈블리 이름을 응용 프로그램 탭에 표시해야합니다. C#에 대한 Resharper에 투자 할 가치가 있을지도 모르지만 시간이 오래 걸리는 네임 스페이스를 저장합니다. – FunksMaName
내 나쁜 :-(ByteToImageConverter 클래스 공개되지 않았습니다. 따라서 오류. 빠른 도움을 주셔서 감사합니다. –