gpt4 book ai didi

c# - 如何不允许 WPF Combobox 为空

转载 作者:太空狗 更新时间:2023-10-29 22:52:20 25 4
gpt4 key购买 nike

我有一个 WPF 组合框,我绑定(bind)了一些东西。用户必须选择其中一项。如果他们不选择任何东西,我想发出警告并让用户重新选择。

怎么做到的?

我正在考虑有一个“选择”按钮。当用户没有选择任何东西时,我设置:

if (combobox.SelectedItem == null)
{
MessageBox.Show("Please select one");

//Here is the code to go back to selection
}

是否有针对此要求的通用解决方案?

提前致谢。

最佳答案

您可以在 ComboBox SelectedItem 上创建一个 ValidationRule,然后您可以让 UI 向用户显示他们需要做某事。

例子:

验证规则:

public class SelectionValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
return value == null
? new ValidationResult(false, "Please select one")
: new ValidationResult(true, null);
}
}

组合框:

<ComboBox ItemsSource="{Binding Items}" >
<ComboBox.SelectedItem>
<Binding Path="SelectedItem">
<Binding.ValidationRules>
<local:SelectionValidationRule ValidatesOnTargetUpdated="True"/>
</Binding.ValidationRules>
</Binding>
</ComboBox.SelectedItem>
</ComboBox>

这将用红色勾勒出 ComboBox

enter image description here

当然还有 WPF,所以你可以自定义所有内容,所以你可以为失败的 Validation 添加 ControlTemplate 并添加验证消息作为 ToolTip

<Window x:Class="WpfApplication9.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication9"
Title="MainWindow" Height="132" Width="278" Name="UI">

<Window.Resources>

<!--If there is a validation error, show in tooltip-->
<Style TargetType="ComboBox" >
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>

<!--Create a template to show if validation fails-->
<ControlTemplate x:Key="ErrorTemplate">
<DockPanel>
<Border BorderBrush="Red" BorderThickness="1" >
<AdornedElementPlaceholder/>
</Border>
<TextBlock Foreground="Red" FontSize="20" Text=" ! " />
</DockPanel>
</ControlTemplate>

</Window.Resources>

<Grid DataContext="{Binding ElementName=UI}">
<ComboBox ItemsSource="{Binding Items}" Margin="21,20,22,48" Validation.ErrorTemplate="{StaticResource ErrorTemplate}">
<ComboBox.SelectedItem>
<Binding Path="SelectedItem">
<Binding.ValidationRules>
<local:SelectionValidationRule ValidatesOnTargetUpdated="True"/>
</Binding.ValidationRules>
</Binding>
</ComboBox.SelectedItem>
</ComboBox>
</Grid>
</Window>

结果:

enter image description here

关于c# - 如何不允许 WPF Combobox 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15342143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com