我为我的Combobox创建了一个自定义项目模板,其中包含一个文本框。当组合框打开(被放下)时我可以输入文本框但是只要选择了项目并且下拉菜单已关闭,我就不能再在文本框中写入。
<ComboBox ItemsSource="{Binding CriteriaCollection}" Margin="2,0,5,5" Height="35" Grid.Column="1">
<ComboBox.ItemTemplate>
<DataTemplate>
<Grid Height="25" HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20" />
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<RadioButton Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Center" IsChecked="{Binding IsSelected, Mode=TwoWay}" />
<TextBlock Grid.Column="1" Text="{Binding DisplayText}" VerticalAlignment="Center" />
<TextBox Grid.Column="2" Text="{Binding Value,Mode=TwoWay}" VerticalAlignment="Center" MinWidth="{Binding ValueTextBoxMinWidth}" MaxWidth="{Binding ValueTextBoxMaxWidth}" HorizontalAlignment="Left"/>
<TextBlock Grid.Column="3" Text="{Binding PostValueText}" VerticalAlignment="Center" Visibility="{Binding ComparatorVisibility}" Margin="5,0,5,0" HorizontalAlignment="{Binding PostValueTextHoirzontalAlignment}" />
<TextBox Grid.Column="4" Text="{Binding UpperValue,Mode=TwoWay}" VerticalAlignment="Center" MinWidth="40" Visibility="{Binding UpperValueVisibility}" Margin="5,0,5,0"/>
</Grid>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
正如您从上面的xaml中看到的那样,我决定通过绑定到我的viewmodel上的某些属性来在模板中显示什么,因此不仅仅有一个带有文本的组合框,而是旁边有一个单独的文本框控件。 / p>
有没有办法在选择项目后允许编辑组合框中的文本?
答案 0 :(得分:0)
不幸的是,ComboBox关闭时显示的内容与ItemTemplate(显示下拉列表时显示的内容)完全无关。
我认为你唯一的希望是继承ComboBox并重新模板化它。新模板将在ContentPresenter中具有TextBox而不是TextBlock。在子类中,您将在TextBox的文本和所选项的文本之间设置双向绑定。
答案 1 :(得分:0)
你可以使用自定义模板作为整体,如RobSiklos所说,但我认为你可以在xaml本身,编写自定义模板,使用overridedefaultstyle属性,在内容演示者中使用Textbox而不是Textblock ,RobSiklos说。
然后你也可以像IsSelected和其他属性一样使用Triggers并处理你的东西。
请参阅此link了解如何创建自定义模板,并为Combobox使用类似的模板,希望对您有所帮助。