2011-01-07 10 views
1

Ich versuche, ein benutzerdefiniertes ItemsControl zu erstellen, indem ich direkt von ItemsControl erwerbe (WPF/Silverlight, verwende ich die gleiche Codebasis für beide). Ich habe eine Item-Klasse dafür erstellt, indem ich von ContentControl geerbt habe. Ich möchte die IsSelected-Eigenschaft für die Item-Klasse erstellen. Ich habe die ListBoxItem-Klasse wiedergegeben, bin mir aber nicht ganz im Klaren darüber, wie die IsSelected-Eigenschaft festgelegt wird. Alle Vorschläge/Hinweise werden sehr hilfreich sein.Wie erstelle ich die IsSelected-Eigenschaft für benutzerdefinierte itemscontrolItem?

+4

Warum erweitern Sie 'ItemsControl' anstatt' Selector' oder 'ListBox', die bereits ein Auswahlverhalten implementieren? –

+0

Ich stimme Daniel zu. Ich habe noch keinen Grund gefunden, eine benutzerdefinierte Implementierung von ItemsControl zu erstellen. Was ist die erhoffte erweiterte Funktionalität, da es einfach genug sein kann, die Art und Weise zu ändern, in der das Steuerelement durch Templating oder auf andere Weise funktioniert. – CodeWarrior

+0

Wahrscheinlich auf diese Weise: Set SelectedItem (ItemsControl) -> innerhalb der Setter einen Steuercontainer finden -> Set IsSelected. Umgekehrt können Sie das PropertyChanged-Ereignis verwenden. – vorrtex

Antwort

1

Wenn Sie eine ItemsControl ohne ListBox Funktionen außer wollen, dass es das Konzept der Auswahl intern unterstützt, können Sie ganz einfach eine lookless erstellen ListBox, die von einem ItemsControl nicht zu unterscheiden ist. Hier sind die zwei nebeneinander und Sie können den Unterschied nicht unterscheiden. Der einzige Unterschied besteht darin, dass die linke Liste die Auswahl intern unterstützt.

<Grid> 
    <Grid.Resources> 
     <x:Array Type="sys:String" x:Key="sampleData"> 
      <sys:String>Red</sys:String> 
      <sys:String>Green</sys:String> 
      <sys:String>Blue</sys:String> 
     </x:Array> 
    </Grid.Resources> 
    <UniformGrid Columns="2"> 
     <ItemsControl ItemsSource="{StaticResource sampleData}"/> 
     <ListBox ItemsSource="{StaticResource sampleData}"> 
      <ListBox.Style> 
       <Style TargetType="ListBox"> 
        <Setter Property="Focusable" Value="False"/> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="ListBox"> 
           <ItemsPresenter/> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </ListBox.Style> 
      <ListBox.ItemContainerStyle> 
       <Style TargetType="ListBoxItem"> 
        <Setter Property="Focusable" Value="False"/> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="ListBoxItem"> 
           <ContentPresenter/> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </ListBox.ItemContainerStyle> 
     </ListBox> 
    </UniformGrid> 
</Grid> 

So ist der beste Rat, wenn Sie Auswahl wollen, stammen aus ListBox und Stil weg, was Sie über es nicht wollen oder zumindest von Selector abzuleiten.

Verwandte Themen