2009-10-16 6 views
1
그래서 나는 목록 상자 항목 템플릿 내에서이 XAML을

:그리드, 목록 상자 내부에 표시되지 정확히 바로

<ListBox.ItemTemplate> 
    <DataTemplate> 
     <Grid Height="22" Width="Auto"> 
      <Image Margin="-2,0,0,0" Source="{Binding Path=ADsPath, Converter={StaticResource ImxConverter}}" HorizontalAlignment="Left" Width="22" /> 
      <TextBlock Margin="20,3,0,0" Text="{Binding Path=DisplayValue}" Width="Auto" /> 
      <Rectangle Fill="White" Stroke="White" Margin="-2,0,-2,0.5" VerticalAlignment="Bottom" Height="1" Width="Auto" /> 
     </Grid> 
    </DataTemplate> 
</ListBox.ItemTemplate> 

아이디어는 사각형, 얇은 흰색을 제공하는 것이 전체 ListBox Item의 하단을 가로 지르는 선; 그러나 위의 Xaml에서는 ListBox의 전체 너비가 아니라 텍스트만큼 확장됩니다.

답변

1

너비를 자동으로 설정하면 기본적으로 내부에 들어갈 수있을 정도로만 커집니다. 제대로 작동하려면 Grid의 HorizontalAlignment를 Stretch로 설정해야한다고 생각합니다.

편집 :

작은 샘플 앱을 만들었습니다. 여기에 당신이 무엇을하려고 할 것입니다 방법은 다음과 같습니다

을 실제 목록 상자에, 나는

나는 DockPanel에 그리드를 바꿀 것 스트레치로 설정 HorizontalContentAlignment 속성을했을 :

<ListBox.ItemTemplate> 
    <DataTemplate> 
     <DockPanel Height="22" HorizontalAlignment="Stretch"> 
      <Rectangle Fill="White" Stroke="White" Margin="-2,0,-2,0.5" DockPanel.Dock="Bottom" Height="1"/> 
      <Image Margin="-2,0,0,0" Height="20" DockPanel.Dock="Left" Width="22" /> 
      <TextBlock Margin="20,3,0,0" Text="Daniel Manning" DockPanel.Dock="Left"/> 
     </DockPanel> 
    </DataTemplate> 
</ListBox.ItemTemplate> 
+0

모든 하위 요소 또는 Grid에서만 Width = "Auto"를 제거해야합니까? – Nate

+1

필자는 TextBlock의 너비가 자동으로 기본적으로 (확실하지 않은) 것으로 생각하고 사각형에서 제거하고 사각형의 HorizontalAlignment를 늘려서 변경할 수 있다고 생각합니다. – Scott

+1

Edit : Only reason을 참조하십시오. Grid가 DockPanel보다 훨씬 비싸고 Dock Panel이 달성하려는 목표에 훨씬 더 효율적으로 보이기 때문에 Grid over DockPanel을 제안합니다. – Scott

1

Width = "Auto"를 삭제 해 보셨습니까? 자동은 "내가 필요로하는만큼 큰 것"이라고 말하면서, 귀하의 경우 텍스트의 길이에 따라 결정됩니다. 기본값은 "스트레치"입니다. "헤이 컨테이너, 나에게 호의를 베풀고 너와 같이 넓게 만들어라"는 의미입니다.