2011-02-12 3 views
4

윈도우 폰 7 응용 프로그램을 개발 중입니다. 창문 7 응용 프로그램을 처음 사용합니다. 내 응용 프로그램에서 다음 목록 상자 컨트롤이 있습니다목록 상자 컨트롤에서 항목을 가로로 표시하는 방법은 무엇입니까?

<ListBox Margin="0,355,70,205" Name="WeekSummaryListBox" DataContext="{Binding}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock TextWrapping="Wrap" Width="150" Text="{Binding Amount}" Foreground="Orange"></TextBlock> 
       <TextBlock TextWrapping="Wrap" Width="150" Text="{Binding Currency}" Foreground="Orange"></TextBlock>        
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 

    <ListBox.Template> 
     <ControlTemplate> 
      <ScrollViewer HorizontalScrollBarVisibility="Visible"> 
       <ItemsPresenter /> 
      </ScrollViewer> 
     </ControlTemplate> 
    </ListBox.Template> 
</ListBox> 

위의 목록 상자 컨트롤 항목은 세로로 표시됩니다. horizonatlly 컨트롤을 목록 상자에 항목을 표시 할 싶어요. 그래서 다음 코드를 사용하고 있습니다.

<ListBox.ItemsPanel> 
    <ItemsPanelTemplate> 
     <StackPanel Orientation="Horizontal"/> 
    </ItemsPanelTemplate> 
</ListBox.ItemsPanel> 

하지만 두 개의 텍스트 블록을 스택 패널에 넣으면 오류가 발생합니다. 이를 위해 다음 코드를 사용하고 있습니다.

<StackPanel Orientation="Horizontal"> 
    <TextBlock TextWrapping="Wrap" Width="150" Text="{Binding Amount}" Foreground="Orange"></TextBlock> 
    <TextBlock TextWrapping="Wrap" Width="150" Text="{Binding Currency}" Foreground="Orange"></TextBlock>        
</StackPanel> 

다음 코드를 사용하려고합니다. 다음 코드에서 나는 오류

<ListBox Margin="0,355,70,205" Name="WeekSummaryListBox" DataContext="{Binding}"> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock TextWrapping="Wrap" Width="150" Text="{Binding Amount}" Foreground="Orange"></TextBlock> 
       <TextBlock TextWrapping="Wrap" Width="150" Text="{Binding Currency}" Foreground="Orange"></TextBlock> 
      </StackPanel> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
    <ListBox.Template> 
     <ControlTemplate> 
      <ScrollViewer HorizontalScrollBarVisibility="Visible"> 
       <ItemsPresenter /> 
      </ScrollViewer> 
     </ControlTemplate> 
    </ListBox.Template> 
</ListBox> 

나는 다음을 사용하고

"을 명시 적으로 패널의 자식 컬렉션이 패널에 대한 ItemsControl.ItemsControl geneartes 자식 요소 ItemsPanel로 사용 수정할 수 없습니다"라는 오류를 얻고 무엇입니까 함수를 사용하여 ListBox에 데이터를 표시합니다.

public void WeekSumValue(int TransactionType_ID) 
{ 
    UserInterfaceManager UserInterfaceManagerObj = new UserInterfaceManager(); 
    List<UserInterfaceManager.TotalSummary> WeekSummary = new List<UserInterfaceManager.TotalSummary>();   
    ObservableCollection<AmountCurrency> WeekIncomeSumCollection = new ObservableCollection<AmountCurrency>(); 

    WeekSummary = UserInterfaceManagerObj.LoadWeekSum(SelectedButtonName, TransactionType_ID, selectedDate); 

    foreach (UserInterfaceManager.TotalSummary vWeekSummary in WeekSummary) 
    { 
     WeekIncomeSumCollection.Add(new AmountCurrency(vWeekSummary.Amount, vWeekSummary.Currency)); 
    } 

    if (WeekIncomeSumCollection.Count != 0 && SummaryCombobox.SelectedIndex == 0) 
    { 
     WeekSummaryListBox.ItemsSource = WeekIncomeSumCollection; 
    } 
    else if (WeekIncomeSumCollection.Count != 0 && SummaryCombobox.SelectedIndex == 2) 
    { 
     MonthSummaryListBox.ItemsSource = WeekIncomeSumCollection; 
    } 
    else 
    { 
     ObservableCollection<TextBlock> NoRecordsCollection = new ObservableCollection<TextBlock>(); 
     TextBlock NoRecordsTextBlock = new TextBlock(); 
     NoRecordsTextBlock.Text = "No record found"; 
     NoRecordsTextBlock.FontSize = 25; 
     NoRecordsTextBlock.Foreground = new SolidColorBrush(Colors.Gray); 
     NoRecordsCollection.Add(NoRecordsTextBlock); 

     if (SummaryCombobox.SelectedIndex == 0) 
      WeekSummaryListBox.ItemsSource = NoRecordsCollection; 

     if (SummaryCombobox.SelectedIndex == 2) 
      MonthSummaryListBox.ItemsSource = NoRecordsCollection; 
    } 
} 

위의 함수에서 데이터가 동적으로 나타납니다. 2 개, 3 개 또는 그 이상의 레코드가있을 수 있으며 레코드가 없을 수도 있습니다. 난 내가 표시 목록 상자 내부에 위의 두 textbock을 넣어하는 방법을 위의 코드

public class AmountCurrency 
{ 
    public int Amount { get; set; } 
    public String Currency { get; set; } 

    public AmountCurrency(int Amount, String Currency) 
    { 
     this.Amount = Amount; 
     this.Currency = Currency; 
    } 
} 

에 사용되는 다음과 같은 클래스를 사용하고

목록 상자 안에있는 textblocks이 동적 데이터 바인딩하고 항목 horizonatlly? 위의 문제를 해결할 수있는 코드 나 링크를 제공해 주시겠습니까? 내가 틀린 일을하고 있다면 나를 안내 해주십시오.

+1

어떤 오류가 발생하고 있습니까? –

+5

내가 본 모든 질문에 대해 달러 (파운드, 유로 등)가있는 경우 오류가 무엇인지 실제로 포함하지 않고 "오류가 발생했습니다"라는 문구가 포함되어 있으면 은퇴 할 수 있습니다. – AnthonyWJones

+1

나는 내 질문을 수정하고 내가 얻고있는 오류에 대해 설명했다. 참조하십시오. –

답변

8

틀린 부분에 두 개의 텍스트 블록이있는 것처럼 보입니다.

이 두 텍스트 블록은하지 ListBox.ItemsPanelTemplate에서 ListBox.ItemTemplate에 있어야합니다 :

<ListBox ItemsSource="{Binding Items}"> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal"></StackPanel> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Margin="0,0,0,17" Width="300" Orientation="Horizontal"> 
       <TextBlock TextWrapping="Wrap" Width="150" Text="{Binding Amount}" Foreground="Orange"></TextBlock> 
       <TextBlock TextWrapping="Wrap" Width="150" Text="{Binding Currency}" Foreground="Orange"></TextBlock> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

이 컨트롤의 작품, 다음 working "basic" control which shows items에서 시작하고 그 다음에 ItemsPanelTemplate를 추가 보는 방법을 이해하려면 작동 샘플.

+0

위의 코드도 시도했지만 레코드를 세로로 표시합니다.페어 금액 및 통화 레코드는 한 행에 표시되고 다음 페어의 경우 레코드는 다음 행에 표시됩니다. 한 줄에 모든 레코드 쌍을 표시하고 싶습니다. –

+1

복사하기가 더 쉽도록 예제를 업데이트했습니다. 그것은 여기에서 작동합니다 ... – Stuart

+0

당신은 생명의 은인입니다. 이것은 아름답게 작동합니다. – pqsk

0

DataContext="{Binding}"ItemsSource="{Binding}"으로 교체하십시오.

+0

도 참조하십시오.이 방법도 작동하지 않습니다. 나는 내 질문을 수정했다. 참조하십시오. –

관련 문제