2011-01-07 6 views
1

ItemsControl(WPF/Silverlight、私は両方とも同じコードベースを使用しています)から直接継承してカスタムのItemsControlを作成しようとしています。 ContentControlから継承してItemクラスを作成しました。 ItemクラスのIsSelectedプロパティを作成します。 ListBoxItemクラスを反映しましたが、IsSelectedプロパティの設定方法があまり明確ではありません。 どのような提案/ポインタが本当に役に立ちます。カスタムitemscontrolItemのIsSelectedプロパティを作成する方法は?

+4

選択動作を既に実装している 'Selector'または' ListBox'ではなく、 'ItemsControl'を拡張することを選択したのはなぜですか? –

+0

私はDanielに同意します。 ItemsControlのカスタム実装を作成する理由はまだ見つかりませんでした。拡張機能のために期待されるものは、コントロールがテンプレートやその他の方法で動作する方法を変更するのに十分シンプルな場合があるからです。 – CodeWarrior

+0

おそらくこのように:SetItem(ItemsControl) - > Setter内でコントロールコンテナを見つける - > Set IsSelected。逆の方法で、PropertyChangedイベントを使用することができます。 – vorrtex

答えて

1

あなたはそれが内部的に選択の概念をサポートしていることを除いて無ListBox機能をItemsControlをしたい場合は、簡単ItemsControlと区別できないlookless ListBoxを作成することができます。ここには2つの2つの側面があり、あなたはその違いを伝えることはできません。唯一の違いは、左のリストが選択を内部的にサポートしていることです。

<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> 

だから、最高のアドバイスは、あなたが選択をしたい場合は、ListBoxから派生であり、あなたがそれについてたいか、少なくともSelectorから派生していないものを離れてスタイル。

関連する問題