2011-07-17 9 views
0

일부 표를 표시하기 위해 을 사용합니다. ListBox을 기반으로하고 (파생 된)이 파생 클래스의 ItemTemplate을 변경하는 클래스를 만들고 싶습니다.ListBox를 기본 클래스로 사용하려면 어떻게해야합니까?

어떻게 할 수 있습니까?

UserControl 클래스에서 파생 된 클래스를 정의하고 UserControl 클래스 옆에 ListBox 인 파생 클래스를 변경하려고 시도하지만 작동하지 않습니다.

다른 방법이 있습니까?

나는 ListBox에서 간단한 실버 라이트 페이지에 추가하는 것처럼 ListBox에있는 ListBoxItem 템플릿을 변경할 수 있어야합니다.

도움 주셔서 감사합니다. 당신이 할 수있는 일

답변

1

는 템플릿 기반 컨트롤 (쉽게 비주얼 스튜디오를 통해 하나가 추가 만들 수 있습니다 - 새 항목 메뉴)를 만드는 것입니다 당신이 목록 상자에서 파생 whcich을 :

public class MyListBox : ListBox 
{ 
    public MyListBox() 
    { 
     this.DefaultStyleKey = typeof(MyListBox); 
    } 
} 

당신은 템플릿 기반 컨트롤을 만들 때 것 또한 Themes 폴더를 만들고 거기에 스타일이 정의 된 generic.xaml을 만듭니다.

<Style TargetType="local:MyListBox"> 
     <Setter Property="Padding" Value="1"/> 
     <Setter Property="Background" Value="#FFFFFFFF" /> 
     <Setter Property="Foreground" Value="#FF000000"/> 
     <Setter Property="HorizontalContentAlignment" Value="Left" /> 
     <Setter Property="VerticalContentAlignment" Value="Top" /> 
     <Setter Property="IsTabStop" Value="False" /> 
     <Setter Property="BorderThickness" Value="1" /> 
     <Setter Property="TabNavigation" Value="Once" /> 
     <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/> 
     <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/> 
     <Setter Property="BorderBrush"> ... 

좋아, 그 같은 당신에게 ItemTemplate을 정의 후 : here에서 스타일을하고 (도, 당신이 ValidationTooltipTemplate 필요) 올바른 위치에 복사하여 generic.xaml을에 붙여 넣습니다 - 그리스트 박스를 찍은 후 XAML :

<DataTemplate x:Key="MyItemTemplate"> 

하고리스트 박스 스타일의 세터 목록에 추가 :

<Style TargetType="local:MyListBox"> 
     <Setter Property="ItemTemplate" Value="{StaticResource MyItemTemplate}"/>^ 

이제 기본 템플릿입니다.

하지만 ListBox에서 상속하기를 원하기 때문에 특정 동작을 ListBox에 추가해야합니다. 특정 항목 템플릿을 추가하려는 경우 ListBox에서 파생시키지 않는 것이 좋습니다 (실제로 DataTemplate은 일반이 아니며 항상 DataType에만 해당됩니다). 특정 동작을 추가하지 않으면 전역 DataTemplate (아마도 app.xaml에 정의되어 있음)을 만들고 DataTemplate으로 필요할 때마다 참조하거나이 DataTemplate을 사용하여 특정 스타일을 만들고 해당 스타일을 공통 ListBox.

질문이 있으시면 의견을 남기십시오.

희망이 도움이됩니다. 당신이 당신의 컨트롤은 목록 상자 기본적으로 보이는 것을 원하는 경우

BR,

TJ

1

다른 방법은 DOIT합니다. ListBox에서 파생 된 클래스를 만들고 기본 생성자에서 DefaultStyleKey를 수정하십시오.

public class MyListBox : ListBox 
{ 
    public MyListBox() 
    { 
     // the control would look like a listBox by default 
     DefaultStyleKey = typeof (ListBox); 
    } 

    (...) 
} 
관련 문제