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中看到的,我通过绑定到我的视图模型上的一些属性来决定在模板中显示什么,因此不仅有一个包含文本的组合框,还有一个单独的文本框控件。

一旦选择了项目,是否有任何方法允许编辑组合框中的文本?

silverlight:在组合框自定义项模板中编辑文本框值

不幸的是,关闭组合框时显示的内容与ItemTemplate(显示下拉列表时显示的)完全无关。

我认为你唯一的希望是将ComboBox子类化并重新模板化。新模板将在ContentPresenter中有一个TextBox而不是TextBlock。在您的子类中,您需要在TextBox的文本和所选项目的文本之间设置双向绑定。

你可以像RobSiklos所说的那样,总体上为你的组合框使用自定义模板,但我认为你可以在xaml本身中做到这一点,编写自定义模板,使用overridedefaultstyle属性,在内容呈现器中使用Textbox而不是Textblock,就像RobSikllos所说的一样。

然后你也可以使用触发器,比如当IsSelected和其他属性,并处理你的东西。

请参阅此链接了解如何创建自定义模板,并在组合框中使用类似的模板有望对您有所帮助。