我正在尝试使我的c#,wpf应用程序使用'IF'语句中的组合框中的值相应地更改文本框中的值。
这个想法是,如果性别组合框选择了“男性”,那么sex.Text应该显示“m”。 如果性别选择了“女性”,则sex.Text应显示“f”。但不幸的是,性文本框在第一次选择时不会显示任何内容。但事后,它一直表现出与我想要的相反。例如,当我选择女性时,它显示“m”,反之亦然,好像它有一个延迟行动的情况。
这是事件:
private void gender_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (gender.Text == "Male")
{
sex.Text = "m";
}
if (gender.Text == "Female")
{
sex.Text = "f";
}
}
有关如何使这项工作的任何线索?
我猜这可能与winforms SelectedIndexChanged事件被SelectionChanged取代有关,因为它是wpf等效物。
显然我可能不知道如何使用它。
非常感谢。
答案 0 :(得分:1)
好的,我无法添加评论,所以这里提出建议。
尝试以这种方式获取当前值:
private void gender_SelectionChanged(object sender, TextChangedEventArgs e)
{
var currentText = (sender as ComboBox).SelectedItem as string;
if (currentText.Equals("Male"))
{
sex.Text = "m";
}
if (currentText.Equals("Female"))
{
sex.Text = "f";
}
}
我在这里编码,很抱歉任何错误输入。
答案 1 :(得分:1)
如果你想正确编写WPF,那么真的需要学习XAML。您不需要任何代码来执行您想要的操作(当然除了数据属性)。你只需要几个DataTrigger
s:
<StackPanel>
<ComboBox Name="ComboBox" ItemsSource="{Binding Items}" />
<TextBox>
<TextBox.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedItem.Text,
ElementName=ComboBox}" Value="Male">
<Setter Property="TextBox.Text" Value="m" />
</DataTrigger>
<DataTrigger Binding="{Binding SelectedItem.Text,
ElementName=ComboBox}" Value="Female">
<Setter Property="TextBox.Text" Value="f" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
</StackPanel>
这当然假设您在后面的代码中有数据绑定的集合DependencyProperty
:
public static DependencyProperty ItemsProperty = DependencyProperty.Register("Items", typeof(ObservableCollection<Gender>), typeof(YourWindow));
public ObservableCollection<string> Items
{
get { return (ObservableCollection<string>)GetValue(ItemsProperty); }
set { SetValue(ItemsProperty, value); }
}
答案 2 :(得分:0)
假设ComboBox
中的项目只是字符串,您可以使用:
private void gender_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
sex.Text = gender.SelectedValue.Equals("Male") ? "m" : "f";
}
Selected
上的ComboBox
- 类型属性似乎反映了事件触发时的新选择,但Text
属性仍然反映了之前的选择。
答案 3 :(得分:0)
我会将您的代码更改为:
browser.ignoreSynchronization = true