C# silverlight:在combobox自定义项模板中编辑文本框值
我已经为我的组合框创建了一个自定义项目模板,其中包含一个文本框。当组合框打开(下拉)时,我可以在文本框中键入内容,但一旦选中该项且下拉框关闭,我就无法再在文本框中写入内容C# silverlight:在combobox自定义项模板中编辑文本框值,c#,.net,silverlight,xaml,silverlight-4.0,C#,.net,Silverlight,Xaml,Silverlight 4.0,我已经为我的组合框创建了一个自定义项目模板,其中包含一个文本框。当组合框打开(下拉)时,我可以在文本框中键入内容,但一旦选中该项且下拉框关闭,我就无法再在文本框中写入内容 <ComboBox ItemsSource="{Binding CriteriaCollection}" Margin="2,0,5,5" Height="35" Grid.Column="1"> <ComboBox.ItemTemplate> <DataTem
<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上的一些属性来决定模板中显示什么,因此不仅仅是有一个包含文本的组合框,还有一个单独的文本框控件
选择项目后,是否有任何方法允许编辑组合框中的文本?不幸的是,组合框关闭时显示的内容与项目模板(显示下拉列表时显示的内容)完全无关
我认为您唯一的希望是对ComboBox进行子类化并重新对其进行模板化。新模板将在ContentPresenter中有一个TextBox而不是TextBlock。在您的子类中,您已经在文本框的文本和所选项目的文本之间设置了双向绑定。正如RobSiklos所说,您总体上可以为您的组合框使用自定义模板,但我认为您可以在xaml本身中这样做,编写自定义模板,使用OverridedFaultStyle属性,RobSiklos说,在内容演示器中再次使用文本框而不是文本块 然后,您还可以使用触发器,如when IsSelected和其他属性,处理您的内容 有关如何创建自定义模板以及如何在组合框中使用类似模板的信息,请参见本文,希望对您有所帮助