문제

이것은 XAML 코드 샘플입니다 MSDN 도서관 기사 itemscontrol.itemtemplate 속성의 경우 :

<ListBox Width="400" Margin="10" ItemsSource="{Binding Source={StaticResource myTodoList}}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=TaskName}" />
<TextBlock Text="{Binding Path=Description}"/>
<TextBlock Text="{Binding Path=Priority}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>  

나는 사용에 대한 설명을 찾고 있습니다. <StackPanel> 요소 가이 예입니다.
->
이 패널은 ListBox에서 어디에 존재합니까?
ItemTemplate에서 그 목적은 무엇입니까?
모든 System.windows.controls.panel, 특히 그리드에서 사용할 수 있습니까?
어떻게 사용하겠습니까? <Grid> ListBox의 각 항목의 템플릿으로 요소?

다음은 다음과 같은 개념입니다.

http://img151.imageshack.us/img151/7960/graphconcept.png

a를 사용하여 그래프를 그렸습니다 <Path> 요소, 그리고 거기에는 문제가 없습니다.

나는 유식 라벨을 작업 중이며 A의 사용을 실험하고 있습니다. <Grid> ItemTemplate의 요소 - 그러나이 맥락에서 그리드가 어떻게 작동하는지 전혀 모르고 MSDN은 샘플 코드의 패널에 대해 아무 말도하지 않습니다.

y 축 라벨 용 내 XAML은 현재 다음과 같습니다.

<ListBox Background="Transparent" BorderThickness="0" ItemsSource="{Binding Path=GraphLabelYData}">
<ListBox.ItemTemplate>  
<DataTemplate>  
<Grid>  
<Grid.RowDefinitions>  
<RowDefinition Height="{Binding Path=GraphLabelSpacing}" />  
</Grid.RowDefinitions>  
<Grid.ColumnDefinitions>  
<ColumnDefinition Width="Auto" />  
<ColumnDefinition Width="{Binding ElementName=GraphLabelYData, Path=GraphLabelMarkerLength}" />  
</Grid.ColumnDefinitions>  
<TextBlock HorizontalAlignment="Right" VerticalAlignment="Bottom" Text="{Binding Path=GraphLabelTag}" />  
<Rectangle Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Stroke="Black" Fill="Black" />  
</Grid>  
</DataTemplate>  
</ListBox.ItemTemplate>  
</ListBox>  

이것이 정확해 보입니까? 런타임에 나타나지 않지만 데이터 바인딩 및 코드-비만을 디버깅하기 전에 XAML이 올바르게 모델링되도록하고 싶습니다.

도움이 되었습니까?

해결책

"이 패널은 ListBox에서 어디에 존재합니까?" - ListBox는 각 목록 항목에 대해 하나의 사본, 즉 MyTodolist 컬렉션의 각 요소에 대해 하나의 사본을 만듭니다. 따라서 각 목록 항목 내에서 세 개의 레이블이 다른 레이블 위에 쌓일 수 있습니다.

"ItemTemplate에서 그 목적은 무엇입니까?" - 항목 소스에서 각 요소에 대해 둘 이상의 컨트롤을 표시 할 수 있도록합니다. WPF의 많은 것들과 마찬가지로 ItemTemplate은 하나의 어린이 요소 만 가져갈 수 있으므로 여러 어린이를 원한다면 원하는 방법을 지정해야하며 패널을 추가하여 수행해야합니다 (이 경우 StackPanel).

"모든 시스템 .windows.controls.panel이 그 자리에, 특히 그리드에 사용될 수 있습니까?" - 물론이지.

"어떻게 사용하겠습니까? <Grid> Listbox의 각 항목에 대한 템플릿으로 요소? " - 다른 곳에서 그리드를 사용하는 것과 같은 방식으로 다르지 않습니다. 단지 Itemscontrol (및 그 후손, Listbox)이 그리드의 여러 인스턴스를 생성합니다. 참고. , ItemTemplate 내부에서 Datacontext는 현재 목록 항목이므로 {Binding}S는 해당 목록 항목과 관련이 있습니다 (EG ElementName으로 달리 지정하지 않는 한).

"이것이 정확해 보입니까?" - 이것은 MSDN 샘플에 대한 질문과 관련이 없으므로 별도의 질문으로 게시해야하며, 당신이 무엇을하려고하는지조차 확신하지 못합니다. 그러나 나는 대답하려고 노력할 것입니다 : 나는 당신이 "GraphLabelyData"라는 이름을 두 가지 다른 방식으로 사용하고 있기 때문에 무언가 잘못되었다고 생각합니다. ColumnDefinition에서, 내가 알 수있는 한, 그래프 플라이 데이터를 XAML 요소의 이름으로 취급하고 있습니다 (즉, Window/Page/UserControl에서 다른 컨트롤을 찾고 있습니다. Name="GraphLabelYData" 또는 x:Name="GraphLabelYData", 및 그 Control의 GraphLabelmarkerlength 속성을 읽습니다); 그러나 TextBlock에서는 GraphLabelyData를 현재 컬렉션 항목의 속성 이름으로 취급하고 있습니다. 나는 그 중 하나가 옳지 않다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top