我要求用户无法选择某些组合框的值,当在第一个ComboBox中选择特定值时,我有两个这样的组合框:
<ComboBox x:Name="jobTypeComboBox" SelectionChanged="ComboBox_SelectionChanged" Margin="10,66,209,461" IsSynchronizedWithCurrentItem="False" AllowDrop="True" PlaceholderText="job type" Background="Black" Foreground="#FFFDFDFD">
<x:String>Repair</x:String>
<x:String>Replace</x:String>
<x:String>Special</x:String>
<x:String>Commercial</x:String>
<x:String>Plexi</x:String>
<x:String>Other</x:String>
</ComboBox>
<ComboBox x:Name="glassTypeComboBox" SelectionChanged="ComboBox_SelectionChanged" Margin="10,109,209,410" IsSynchronizedWithCurrentItem="False" AllowDrop="True" PlaceholderText="glass type" Background="Black">
<x:String>Windscreen</x:String>
<x:String>Rearscreen</x:String>
<x:String>Side Glass</x:String>
<x:String>Mirror</x:String>
<x:String>Building Glass</x:String>
<x:String>Other</x:String>
</ComboBox>
如果我选择修复&#39;在第一个组合框上,第二个组合框不能包含挡风玻璃以外的任何值。或者&#39;后屏幕&#39;我是XAML的新手并不确定我会以何种方式拒绝用户在此组合框中选择某些值
编辑:
private void jobTypeComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
foreach (var glassType in glassTypeComboBox.Items)
{
ComboBoxItem cbi = glassType as ComboBoxItem;
cbi.IsEnabled = true; // always default to enabled.
if (jobTypeComboBox.SelectedValue.ToString() == "Repair")
{
if ((cbi.Content.ToString() != "Windscreen") && (cbi.Content.ToString() != "Rearscreen"))
{
cbi.IsEnabled = false;
}
}
if (jobTypeComboBox.SelectedValue.ToString() == "Replace")
{
//More conditions here
}
}
}
我正在使用什么来尝试删除/禁用我不想要的值(感谢Lynn Crumbling)的想法/帮助!只是不能让它在这里读取if条件:
if (jobTypeComboBox.SelectedValue.ToString() == "Repair")
我也尝试过:
if (this.jobTypeComboBox.SelectedValue.ToString() == "Repair")
和林恩的初步建议,有很多例子。
即使选择了它,它也会在调试期间跳过它。任何额外的建议都会很棒!
答案 0 :(得分:1)
如果您将组合框中的条目更改为实际的ComboBoxItem控件:
<ComboBox x:Name="jobTypeComboBox"
SelectionChanged="jobTypeComboBox_SelectionChanged" ...more stuff...>
<sys:String>Repair</sys:String>
<sys:String>Replace</sys:String>
<sys:String>Special</sys:String>
<sys:String>Commercial</sys:String>
<sys:String>Plexi</sys:String>
<sys:String>Other</sys:String>
</ComboBox>
<ComboBox x:Name="glassTypeComboBox"
SelectionChanged="glassTypeComboBox_SelectionChanged" ...more stuff...>
<ComboBoxItem>Windscreen</ComboBoxItem>
<ComboBoxItem>Rearscreen</ComboBoxItem>
<ComboBoxItem>Side Glass</ComboBoxItem>
<ComboBoxItem>Mirror</ComboBoxItem>
<ComboBoxItem>Building Glass</ComboBoxItem>
<ComboBoxItem>Other</ComboBoxItem>
</ComboBox>
您可以连接jobTypeComboBox_SelectionChanged
事件以修改您选择的已启用ComboBoxItem:
private void jobTypeComboBox_SelectionChanged(object sender,
System.Windows.Controls.SelectionChangedEventArgs e)
{
foreach (var glassType in this.glassTypeComboBox.Items)
{
ComboBoxItem cbi = glassType as ComboBoxItem;
cbi.IsEnabled = true; // always default to enabled.
if (this.jobTypeComboBox.SelectedValue.ToString() == "Repair")
{
if ((cbi.Content.ToString() != "Windscreen") &&
(cbi.Content.ToString() != "Rearscreen"))
{
cbi.IsEnabled = false;
}
}
if (this.jobTypeComboBox.SelectedValue.ToString() == "Replace")
{
// Add more conditions... you get the idea...
}
}
}
这只是一个小片段,专门用来禁用这些项目。你可能想要更多的条件。
旁注:曾经考虑过使用MVVM方法和数据绑定吗?它太强大了。
答案 1 :(得分:0)
尝试从ComboBox中删除项目,如果作业类型发生更改,请不要忘记保存所有jobTypeComboBox项目以恢复它们。这只是一个想法。根据需要进行专业化。
if (jobTypeComboBox.Text == "Repair")
for (int i = 2; i < jobTypeComboBox.Items.Count; i++)
glassTypeComboBox.RemoveAt(i);