我正在学习如何使用Powershell创建WPF表单。我有一个充满项目的ComboBox,并且在选中后,它们应该填充一个TextBox。我使用数据绑定将TextBox的Text属性连接到当前选择的ComboBox项。但是当我选择一个项目时,它会填充为
System.Windows.Controls.ComboBoxItem: Test 1
,而不只是Test 1
。
[xml]$Form = @"
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
Title="Test Window" Height="200" Width="400">
<StackPanel>
<ComboBox Name="ComboBox1" Margin="10">
<ComboBoxItem>Test 1</ComboBoxItem>
<ComboBoxItem>Test 2</ComboBoxItem>
</ComboBox>
<TextBox Name="textBox" Margin="10" Text="{Binding ElementName=ComboBox1, Path=SelectedValue}"/>
</StackPanel>
</Window>
"@
$NR=(New-Object System.Xml.XmlNodeReader $Form)
$WIN=[Windows.Markup.XamlReader]::Load( $NR )
$WIN.Showdialog()
我已经看到了其他一些在C#中执行此操作的方法,但是我试图将其作为Powershell脚本来执行。
答案 0 :(得分:0)
最好的方法可能只是使ComboBox可编辑,而放弃基于TextBox的方法:
<ComboBox Name="ComboBox1" Margin="10" IsEditable="True">
...
这不仅允许用户从下拉菜单中选择文本(ComboBoxItems),而且允许用户输入和修改当前文本,而ComboBoxItems本身保持不变/不变。
但是,如果确实希望通过文本框更改ComboBoxItems本身的文本,则需要与ComboBoxItem的Content
属性绑定。像这样:
<TextBox Name="textBox" Margin="10" Text="{Binding SelectedItem.Content, ElementName=ComboBox1}"/>
在文本框中编辑文本之后,组合框中的项目将相应更改(当文本框失去焦点时)。
如果您希望ComboBoxItem以“实时”方式跟随文本框中的编辑,请将绑定更改为:
Text="{Binding SelectedItem.Content, ElementName=ComboBox1, UpdateSourceTrigger=PropertyChanged}"