<ComboBox Margin="10,10,0,0" x:Name="Combo1" MinWidth="500" IsDropDownOpen="True" IsEditable="False" Header="ASIO Driver selection:"
ItemsSource="{x:Bind Drivers}"
SelectedIndex="0" SelectionChanged="AsioSelChanged" >
<ComboBox.ItemTemplate>
<DataTemplate x:DataType="local:AsioItem">
<TextBlock Text="{x:Bind Name1}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
上面的设置创建了一个组合框,但是这个组合框虽然它确实选择了项目,但它没有将文本设置为它所选择的项目。
winrt::Windows::Foundation::Collections::IObservableVector<winrt::tsed::AsioItem> Audio::Drivers()
{
auto children = single_threaded_observable_vector<tsed::AsioItem>();
// fill children
...
///
auto topnv = Content().as<StackPanel>();
auto cb = topnv.FindName(L"Combo1").as<ComboBox>();
cb.Text(L"test"); // this doesn't work either
}
如何告诉 CombBox 执行显而易见的操作,即将组合框的选定文本设置为它的文本?
当
IsEditable为
Text
时,true
属性将处于活动状态。如果您想获取文本,在您的情况下 Name
,您可能需要使用 SelectedValuePath
和 SelectedValue
:
<ComboBox
x:Name="Combo1"
ItemsSource="{x:Bind Drivers}"
SelectedIndex="0"
SelectedValuePath="Name">
<ComboBox.ItemTemplate>
<DataTemplate x:DataType="local:AsioItem">
<TextBlock Text="{x:Bind Name}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock Text="{x:Bind Combo1.SelectedValue, Mode=OneWay}" />