簡體   English   中英

silverlight:在組合框自定義項模板中編輯文本框值

[英]silverlight: Editing Textbox Value in combobox custom item template

我為我的組合框創建了一個自定義項目模板,其中有一個文本框。 當組合框打開(正在下拉)時,我可以在文本框中鍵入內容,但是一旦選中該項目且下拉列表關閉,我將無法再在文本框中輸入內容。

<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時顯示的內容與ItemTemplate完全無關(顯示下拉列表時即顯示的內容)。

我認為您唯一的希望是繼承ComboBox並重新創建模板。 新模板在ContentPresenter內部將具有TextBox而不是TextBlock。 在子類中,您將在TextBox的文本和所選項目的文本之間建立雙向綁定。

您可以按照RobSiklos的說明在整個組合框中使用自定義模板,但是我認為您可以在xaml本身中做到這一點,編寫自定義模板,使用overridedefaultstyle屬性,在內容演示者中再次使用Textbox而不是Textblock, RobSiklos。

然后,您還可以使用觸發器(如IsSelected時)和其他屬性來處理您的工作。

有關如何創建自定義模板的信息,請參見此鏈接 ,並為您的組合框使用類似的模板希望對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM