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

时间:2011-06-22 14:52:58

标签: c# .net silverlight xaml silverlight-4.0

我为我的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>

有没有办法在选择项目后允许编辑组合框中的文本?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

你可以使用自定义模板作为整体,如RobSiklos所说,但我认为你可以在xaml本身,编写自定义模板,使用overridedefaultstyle属性,在内容演示者中使用Textbox而不是Textblock ,RobSiklos说。

然后你也可以像IsSelected和其他属性一样使用Triggers并处理你的东西。

请参阅此link了解如何创建自定义模板,并为Combobox使用类似的模板,希望对您有所帮助。