![](/img/trans.png)
[英]Change comboBox options depending on the selected item of a previous comboBox
[英]change textbox value depending on combobox selected item
我正在嘗試使我的 c#、wpf 應用程序使用“IF”語句根據組合框中的值相應地更改文本框中的值。
這個想法是,如果 Gender 組合框選擇了“Male”,那么 sex.Text 應該顯示“m”。 如果 Gender 選擇了“Female”,則 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 等效。
顯然,我可能不知道如何使用它。
非常感謝幫助。
好吧,我不能添加一個cament,所以這里提出一個建議。
嘗試以這種方式獲取當前值:
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";
}
}
我在這里編碼,很抱歉任何錯誤輸入。
如果你想正確編寫WPF,那么你真的需要學習XAML。 您不需要任何代碼來執行您想要的操作(當然除了數據屬性)。 你可以用幾個DataTrigger
來做到這DataTrigger
:
<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); }
}
假設您在ComboBox
中的項目只是字符串,您可以使用:
private void gender_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
sex.Text = gender.SelectedValue.Equals("Male") ? "m" : "f";
}
看起來ComboBox
上的Selected
-type屬性反映了事件觸發時的新選擇,但Text
屬性仍然反映了之前的選擇。
我會將您的代碼更改為:
private void gender_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (gender.SelectedValue == "Male")
{
sex.Text = "m";
}
if (gender.SelectedValue == "Female")
{
sex.Text = "f";
}
}
我來晚了,但請參閱以下內容以獲得正確的編碼:
在 xaml 頁面中:
<ComboBox x:Name="Gender" Grid.Row="0" Grid.Column="1" IsEditable="True" TextBoxBase.TextChanged="Gender_SelectionChanged"/>
<TextBox x:Name="Sex" Grid.Row="0" Grid.Column="3"/>
在 C# 頁面中:
private void Gender_SelectionChanged(object sender, RoutedEventArgs e)
{
Sex.Text = Gender.Text.ToLower().Substring(0, 1);
}
祝你好運
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.