silverlight:在组合框自定义项模板中编辑文本框值
本文关键字:编辑 文本 组合 自定义 silverlight | 更新日期: 2023-09-27 18:00:07
我已经为我的组合框创建了一个自定义项目模板,其中有一个文本框。当组合框打开(被下拉)时,我可以在文本框中键入,但一旦选择了项目并关闭了下拉框,我就不能再在文本框里写了。
<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中看到的,我通过绑定到我的视图模型上的一些属性来决定在模板中显示什么,因此不仅有一个包含文本的组合框,还有一个单独的文本框控件。
一旦选择了项目,是否有任何方法允许编辑组合框中的文本?
不幸的是,关闭组合框时显示的内容与ItemTemplate(显示下拉列表时显示的)完全无关。
我认为你唯一的希望是将ComboBox子类化并重新模板化。新模板将在ContentPresenter中有一个TextBox而不是TextBlock。在您的子类中,您需要在TextBox的文本和所选项目的文本之间设置双向绑定。
你可以像RobSiklos所说的那样,总体上为你的组合框使用自定义模板,但我认为你可以在xaml本身中做到这一点,编写自定义模板,使用overridedefaultstyle属性,在内容呈现器中使用Textbox而不是Textblock,就像RobSikllos所说的一样。
然后你也可以使用触发器,比如当IsSelected和其他属性,并处理你的东西。
请参阅此链接了解如何创建自定义模板,并在组合框中使用类似的模板有望对您有所帮助。