2013-08-23 2 views
2

에 내가 MVVM WPF 응용 프로그램이 나는 스타일과 같은 시작 화면 (아래 그림 참조) VS2012에서 하나를 만들 스택 패널VS2012 스타일의 ListView가/WPF

ListVS2012

싶습니다 만들기 위 이미지의 최근 문서에 대한 것과 같은 ListView 또는 스택 패널을 만들 수 있습니다. 이 응용 프로그램의 다른 영역에서 컨트롤을 사용할 수 있도록 DataTemplate 사용하여이 작업을 수행하고 싶습니다.

WinForms에서는 사용자 정의 컨트롤을 설계 할 것이지만 WPF에서는이를 수행하는 가장 좋은 방법은 혼란 스럽습니다. 나는

<DataTemplate x:Key="imageWithTextBlockTemplate"> 
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"> 
     <Image Source="{Binding Converter={StaticResource booleanToImageConverter}}" 
           Stretch="UniformToFill" Width="16"/> 
     <TextBlock Text="{Binding}"/> 
    </StackPanel> 
</DataTemplate> 

이 (명확하게) 완성 된 것이 아니라 이것이 올바른 접근, 또는 거기가 더 나은 데이터 템플릿을 포함하는 리소스 파일과 고정/해제 고정 된 이미지에 대한 변환기를 사용하여 고려했다/그런 일을하는 더 표준적인 방법?

감사합니다.

+0

WPF에서 UserControl을 디자인하지 않는 이유는 무엇입니까? – Dutts

+0

할 수는 있지만 목록보기에서 이미지와 텍스트를 얻으려면 기존 컨트롤을 사용할 수없고 내 컨트롤을 만들어야한다는 인상하에있었습니다. 길고 짧게, 나는 걸릴 올바른 접근 방식으로 혼란스러운 태도입니다 ... – MoonKnight

+1

죄송합니다, 내 의견은 아주 경솔했다. 사실 DataTemplate을 사용하여 제안 된 솔루션은 완전히 새로운 컨트롤을 작성하는 것보다 완벽한 "WPF"사운드와 사운드라고 생각합니다. – Dutts

답변

2

VS2012와 비슷한 모양의 컨트롤을 만들려면 VS2012에서 "방법"을 파악하는 것이 가장 좋습니다. VS2012는 WPF로 만들어졌습니다. 당신이 참으로 ListBox 사용되는 즉 볼 수 있듯이

enter image description here

: 당신이 Snoop을 얻을 "시작 페이지"를 분석하는 경우

그래서, 당신은 같은 것을 볼 수있다.

그들은 다음 오른쪽 프로젝트 아이콘 (Image)와 이름 (TextBlock)을 유지하는 또 다른 Grid되는 다음 "고정"상태를 유지하고있는 사용자 정의 CheckBoxGrid으로 DataTemplate을 수 있습니다.

업데이트 : CheckBox에 관해서는

, 그들은 Microsoft.VisualStudio.PlatformUI.ImageCheckBox를 사용합니다. 이제 정확한 정의를 얻기 위해 반사체를 작동 시키거나 Snoop의 데이터를 기반으로 말할 수 있습니다.이 컨트롤에 BorderImage이 들어있는 것처럼 보입니다. 나는 당신의 VM에 컬렉션의 각 항목이있을 것이다

  • 이 정보를 사용하여 구현 등 지금

    pack://application:,,,/Microsoft.VisualStudio.Shell.11.0;component/UI/Images/pinned normal.png 
    
    pack://application:,,,/Microsoft.VisualStudio.Shell.11.0;component/UI/Images/unpinned normal.png 
    

    ,의 Text를 개최 :이 사용

    Image 소스는 다음과 같은 수 있습니다 및 IsPinned 상태.

  • 다음으로 맞춤 CheckBox 스타일을 만들고 이미지 또는 이미지가있는 테두리를 보유하려면 ControlTemplate을 수정하십시오.
  • 당신은이 아이들과 StackPanel (Orientation="Horizontal")와 DataTemplateListBox.ItemTemplate에 꽤 많이있을 수 있습니다, 다양한 "고정"이미지 사이이와
  • 을에서 전환 할 Image.Source을 수정 따라 IsChecked 속성을 확인하기 위해 ControlTemplate.Triggers를 사용합니다. 먼저 위의 사용자 정의 Style 사용자 지정 및 TextBlock 사용자 지정을 사용하는 확인란.
  • 마지막이 꽤 많이해야 {Binding Text}

{Binding IsPinned}TextBlock.TextDataTemplate에서 CheckBox.IsChecked을 결합한다. 또한 ListBox.ItemContainerStyle을 없애고 ListBox의 기본 마우스 오버 효과를 말하고 아마도 HorizontalContentAlignment="Stretch"을 설정해야합니다. 그러나 이들은 실제로 사용자의 일부가 아닙니다. DataTemplate