我有一个combobox
,我希望显示多个对象,并返回enum
个值。根据外部数据在视图中生成combobox
的随机数。 combobox
按预期工作,但在我打开其中任何一个然后是另一个,然后是我第一次打开的那个,然后第一个中的项目无法访问。(项目仍然存在但是dropdown
菜单为空)。
要明确我一步一步地把我的行动放在这里:
ComboBox1
。我可以看到所有物品。ComboBox2
。我可以看到所有物品。ComboBox1
。下拉菜单中没有任何项目。ComboBox3
。我可以看到所有物品。ComboBox1
和ComboBox2
消失。 我猜这个问题是由ItemsSource
的路径损坏造成的,但我无法弄清楚如何避免它。
<DataTemplate x:Key="CustomizedComboBox">
<StackPanel Width="70" Margin="0,0,12,0">
<ComboBox
SelectedIndex="{Binding Path=Type, Mode=TwoWay, Converter={vm:SelectedItemConverter}}"
ItemsSource="{StaticResource IconsAndLabelsArray}"
MinHeight="50"/>
</ComboBox>
</StackPanel>
IconsAndLabelsArray
:
<x:Array x:Key="IconsAndLabelsArray" Type="{x:Type StackPanel}" >
<StackPanel Orientation="Horizontal">
<Image Height="42"
VerticalAlignment="Top"
Source="/ProjectName;image1.png"
Stretch="Uniform" />
<Label VerticalAlignment="Center" Content="Image1 Label" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<Image Height="42"
VerticalAlignment="Top"
Source="/ProjectName;image2.png"
Stretch="Uniform" />
<Label VerticalAlignment="Center" Content="Image2 Label" />
</StackPanel>
答案 0 :(得分:0)
在x:Shared="False"
上设置IconsAndLabelsArray
,以便为每个comboBox创建新资源,而不是使用之前的资源。
<x:Array x:Shared="False" x:Key="IconsAndLabelsArray"
Type="{x:Type StackPanel}" >
....
</x:Array>
问题是在添加到另一个Visual父级之前必须断开Visual。这就是为什么组合框最后打开的原因总是赢了,因为资源是默认共享的。因此有一个问题。
将sharing设置为false将为每个comboBox提供新的资源实例。