4

項目ソースとして ObservableCollection としての ComboBox があります。したがって、ComboBox はラベルで構成されます。

ユーザーが生成できる UserControls がいくつかあり、これらの UserControls のそれぞれに複数の ComboBox を設定できます。UserControl が作成されると、UserControl の名前のラベルが ObservableCollection に追加されるため、アイテム ソースが ObservableCollection であるすべての ComboBox にも最新のラベルが追加されます。

すべてが正常に動作し、期待どおり、新しい UserControls が生成されると、ComboBoxes が読み込まれます。しかし、非常に奇妙な問題が発生しています。

ユーザーが 1 つの UserControl の ComboBox ドロップダウン メニューを開くと、すべてのラベルが適切に表示されます。

次に、ユーザーが別の UserControl の ComboBox ドロップダウン メニューを開くと、すべての項目が同じ方法で表示されます。奇妙な問題は、ユーザーが前の UserControl の ComboBox に戻ると、項目が消えることです。デバッグしたところ、ラベルがまだアイテムとして含まれていることがわかったので、ラベルはまだそこにありますが、高さが 0 に設定されているかのようです (デバッグ時に、高さが 0 ではなく 26 であることがわかりました事実)。

同量のラベルが含まれており、上のスクリーンショットに見られるように、それらは選択可能ですが、表示されていません (何かを選択していることを示す小さな青いバーが表示されているだけです)。ラベルの高さをどこにも変更していません。

ユーザーは、WPF がそれが表すコレクションによって CollectionView をキャッシュするため、すべての ComboBoxes が CollectionView の同じインスタンスを共有するとコメントしています。したがって、Label は視覚的な親を 1 つしか持つことができないため、ユーザーが 2 番目の ComboBox を展開すると、最初の ComboBox からラベルが切り離されます。

4

1 に答える 1

1

これが解決策です。このように変更ComboBoxし、にバインドObservableCollection<T>しますComboBoxObservableCollection<Label>をに変更する必要があることに注意してくださいObservableCollection<string>

<ComboBox x:Name="cmb1" Height="24" Margin="0,27,0,0" VerticalAlignment="Top" Width="131">
   <ComboBox.ItemTemplate>
       <DataTemplate>
           <Label Content="{Binding}"/>
       </DataTemplate>
   </ComboBox.ItemTemplate>
</ComboBox>

これがお役に立てば幸いです。

于 2013-03-21T12:55:50.510 に答える