2016-10-21 2 views
0

블렌드와 WPF에 익숙하며 ListBox 종류의 속성이 있지만 내 자신의 사용자 지정 항목이있는 컨트롤을 갖고 싶습니다. 본질적으로 각 항목은 레이블이있는 반올림 된 사각형으로하고 싶습니다. 내가 생각했던 첫 번째 방법은 UserControl과 StackPanel을 사용하는 것이었지만, 프로그램에 포커스가있는 객체를 알려주는 방법을 생각할 수는 없었습니다. 이러한 이유로 ListBox를 사용하여 사용자 지정 ListBoxItem을 만들 수 있다고 생각했지만 분명히 사각형 만 컨트롤로 변환되어 레이블이 손실 될 수 있습니다. 모든 포인터가 큰 도움이됩니다.블렌드에서 사용자 지정 목록을 만드는 방법

답변

0

ListBox를 사용할 수 있으며 레이블이 아닌 직사각형에 국한되지 않습니다.

표준 ListBox를 사용하고 ListBox.ItemTemplate을 원하는만큼 복잡하게 만듭니다. 여러 개의 컨트롤을 서로 겹쳐서 배치해야하는 경우 Canvas 또는 Grid 컨트롤로 시작하여 거기에서부터 시작할 수 있습니다.

또는 항목 템플릿을 단일 Label 컨트롤 (논리적으로 항목이 레이블로 작동하는 경우)으로 만들고 ControlTemplate을 사용하여 해당 레이블에 렌더링 된 시각적 트리를 완전히 다시 만들 수 있습니다.

참고 :

  1. ItemTemplate

  2. ControlTemplate

여기에 빠른 예입니다.

XAML :

<Grid> 
    <ListView ItemsSource="{Binding Path=Labels}"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <Grid> 
        <Rectangle Fill="CadetBlue" RadiusX="10" RadiusY="10" SnapsToDevicePixels="True"> 
        </Rectangle> 
        <Label Content="{Binding}" Padding="10"/> 
       </Grid> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 
</Grid> 

은 "뷰 모델"

public IEnumerable<string> Labels 
    { 
     get { return new string[] { "Foo", "Bar", "Baz" }; } 
    } 

그리고 결과 :

Output

관련 문제