2012-10-07 3 views
0

내 모든 Xbox 라이브 친구 정보를 보여주는 XML 문서에서 정보를 가져 오려고합니다. 지금하고 싶은 것은 동적으로 생성 된 이미지 컨트롤에 아바타를 표시하는 것입니다.하지만 실제로 어떻게 그 이미지가 내 앱 그리드에 표시 될지 확신 할 수 없습니다.동적 이미지 컨트롤 메트로 앱을 만드는 방법

지금까지 나는 게이머 태그를 사용하고 사용자 정의 텍스트를 추가하여 동적 컨트롤을 만들려고 시도했습니다. 지금까지 코드 :

 string gamertag, avatarURL; 
     foreach (XElement elm in doc.Descendants().Elements("Friends")) 
     { 

      gamertag = elm.Element("Gamertag").Value; 
      avatarURL = elm.Element("AvatarLarge").Value; 

      Image friendimage = new Image(); 
      friendimage.Name = gamertag.ToString() + "ImageControl"; 

      BitmapImage AccountPicbitmap = new BitmapImage(); 
      AccountPicbitmap.UriSource = new Uri(avatarURL); 

      friendimage.Source = AccountPicbitmap; 
      //Some code to display this control with the avatar image using the URL retrieved, I want to play these tiles side by side 

     } 

내가 어떻게 할 수 있습니까? 미리 감사드립니다!

UPDATE : 가 내 XAML에이 컨트롤을 추가하고 있지만, 지금은 몇 가지 이상한 예외를 얻고있다 : System.Runtime.Remoting.RemotingException 을 [7756] 디자이너 프로세스가 예기치 않게 종료!

<ItemsControl HorizontalAlignment="Left" Height="100" VerticalAlignment="Top" Width="1249" Margin="55,484,0,0" ItemsSource="{Binding}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Image Source="{Binding avatarURL}" Name="{Binding GamerTag}"/> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 

</ItemsControl> 

내가 응용 프로그램을 디버깅 할 때 지금은 무한 루프로 전환되고이이 같은 XAML 뭔가 할 쉬울 것

public MainPage() 
    { 
     this.InitializeComponent(); 
    } 
+0

가 왜 XAML에서이 일을하지 않습니다 : 뒤에

<ItemsControl ItemsSource="{Binding}"> <ItemsControl.DataTemplate> <DataTemplate> <Image Source="{Binding avatarURL}" Name="{Binding GamerTag}"/> </DataTempate> </ItemsControlDataTempalte> </ItemsControl> 

코드는 다음과 같이해야 하는가? xaml에서 이와 같은 작업을 쉽게 수행 할 수 있습니다. – mydogisbox

+0

글쎄, 내가 xaml 디자인을 가지고 있지만 이것은 코드 배후입니다. xaml을 어떻게 사용합니까? – KPS

답변

0

초기화에뿐만 아니라 예외가 발생합니다 :

먼저 페이지의 DataContext을 viewmodel로 설정하십시오. 그런 다음 친구 컬렉션을 GamerTagavatarURL에 노출되는 개체 모음으로 노출하는 속성을 만듭니다. 이 컬렉션을 표시하려면 다음 XAML을 사용

public class yourCodeThatGetsYourFriends : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    public void GetFriends() 
    { 
     //get friends and put into friend objects defined below 
     //create an ObservableCollection of them and assign it to the Friends (make sure its 'Friends' not 'friends") property 
    } 
    public ObservableCollection<friend> friends; 
    public ObservableCollection<friend> Friends; 
    { 
     get 
     { 
      return friends; 
     } 
     set 
     { 
      friends = value; 
      NotifyPropertyChanged("Friends"); 
     } 
    }   

    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "") 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

} 

public class friend : INotifyPropertyChanged 
{   
    public event PropertyChangedEventHandler PropertyChanged; 

    string url; 
    public string avatarURL 
    { 
     get 
     { 
      return url; 
     } 
     set 
     { 
      url = value; 
      NotifyPropertyChanaged("avatarURL"); 
     } 
    } 
    string tag; 
    public string GamerTag 
    { 
     get 
     { 
      return tag; 
     } 
     set 
     { 
      tag= value; 
      NotifyPropertyChanaged("GamerTag"); 
     } 
    } 

    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "") 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

} 
+0

자세한 정보가 필요하면 알려주십시오. – mydogisbox

+0

내가 추가 한 코드로 원래 질문을 확인하십시오. 내가 언급 한 것과 같은 컨트롤을 찾지 못해서 ItemsControl 인 것이 가장 좋을 것이라고 생각 했었습니다. – KPS

+0

mydogisbox가 설명하려고하는 것은 1) GamerTag, avatarURL 등과 같은 속성을 가진 클래스를 생성해야한다는 것입니다. 2) XML을 구문 분석하고 파싱 된 데이터로 클래스를 채 웁니다. 3) 코드에서 아직 작성한 클래스의 인스턴스로 DataContext를 설정하십시오. – Ewerton

관련 문제