2012-03-15 18 views
0

データバインディングにListBoxを使用している場合、リストボックスは各アイテムのリストボックス項目を生成します。コンボボックスとcomboBoxItemも同じです。 私の質問は - どのように私はそれを自分自身の設定ItemsControlのために設定するのですか? (例えば、包含要素を境界にする)? ILSpyで少し掘った後データバインディングでitemscontrolの生成された項目を設定する方法は?

+0

[のItemsControlに任意の特定のスタイルを適用したい場合は、ItemTemplateを設定することができます.ItemContainerStyle](http://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.itemcontainerstyle.aspx) –

答えて

0

- どうやら魔法が

protected override DependencyObject GetContainerForItemOverride() 
    { 
     return new ListBoxItem(); 
    } 

で行われ

これは、リストボックスはそれをしないところである - そして私のコントロールに私もこれをオーバーライドする必要があります。それはあなたのUIとは外観や特定の行動だろう混乱を持っていないので

+2

これは正しいアプローチですか?カスタムスタイルはあまり複雑ではないようです。私の状況では – Mizipzor

+0

カスタムスタイルでは不十分です。あなたが私の質問をもう一度見ると、これは私が最初に尋ねたものです。 –

+1

あなたの質問を理解していないか、カスタムスタイルを理解していないか、 – Mizipzor

1

各項目をラップするために使用されるデフォルトの項目は、私はあなたがこれを上書きしたいと思いますなぜわからないContentPresenter

です。

あなたはBorderオブジェクト

<ItemsControl.ItemTemplate> 
    <DataTemplate> 
     <Border BorderBrush="Blue" BorderThickness="2"> 
      <TextBlock Text="{Binding }" /> 
     </Border> 
    </DataTemplate> 
</ItemsControl.ItemTemplate> 

で各項目を包むかItemContainerStyleを設定したい場合は、ContentPresenter

<ItemsControl.ItemContainerStyle> 
    <Style> 
     <Setter Property="Grid.Column" Value="{Binding ColumnIndex}" /> 
     <Setter Property="Grid.Row" Value="{Binding RowIndex}" /> 
    </Style> 
</ItemsControl.ItemContainerStyle> 
+0

+1 ItemsContainerSyleのborderの構文は何ですか? – Paparazzi

+0

@Blam 'ContentPresenter'には、境界要素を持たない視覚的な外観はまったくありません。コンテンツを保持するためのコンテナオブジェクトです。各項目に 'Border'を付ける場合は、' ItemTemplate'にあるような 'Border'オブジェクトに項目をラップする必要があります。デフォルトのコンテンツは、オブジェクトにバインドされたTextBlockですが、他のもので上書きすることはかなり一般的です。 – Rachel

+0

これは私が求めていたものではありません..Itは、itemscontrolをdatabindするたびに、リスト内の各項目の要素を生成します。私はテンプレートを含むために境界線を追加するだけでなく、包含要素を置き換えたいと思っていました。 –

関連する問題