我希望 Button
控件的属性为 IsEnabled="False"
,直到在 中的
。TextBox
中输入值为止窗口
到目前为止的代码:
<Button
Content="Click Me"
Name="ClickMe"
VerticalAlignment="Top"
Click="ClickMe_Click">
<Button.Style>
<Style>
<Style.Triggers>
<DataTrigger
Binding="{Binding ElementName=textBox, Path=Length}"
<!-- or even: Binding="{Binding Path=textBox.Length}" -->
Value="0">
<Setter
Property="Button.IsEnabled"
Value="false" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
此外,是否可以让此 Button
控件的 IsEnabled
属性基于 3 个不同的 TextBox
控件,并且都具有值?
最佳答案
假设您正在使用表示模型(例如 ViewModel),您应该直接绑定(bind)数据而不是 UI 元素。
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding FirstName}" Value="{x:Null}" />
<Condition Binding="{Binding MiddleName}" Value="{x:Null}" />
<Condition Binding="{Binding LastName}" Value="{x:Null}" />
</MultiDataTrigger.Conditions>
<Setter Property="Button.IsEnabled" Value="False" />
</MultiDataTrigger>
</Style.Triggers>
也就是说,如果您使用的是演示模型,则可以随时添加 bool
“EnableSave”属性并处理所有表示逻辑,而不是在 View 本身中。
更新
从评论中可以看出,我错误地将其设置为启用 Button
当任何 TextBox
有一个值,但要求是Button
当全部TextBox
时启用es 有值。
从概念上讲,您所要做的就是反转条件 - 我们想要的是“如果所有条件都为真,则为真”,而不是“如果所有条件都为假,则为假”。
问题是,没有办法在 XAML 中说“not null”——没有 IValueConverter
就不可能。 , 那是。我会创建一个 NullToBoolConverter
返回 false
对于 null
和true
对于 != null
.
给定这样一个转换器:
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding FirstName,
Converter={StaticResource NullToBoolConverter}}" Value="True" />
<Condition Binding="{Binding MiddleName,
Converter={StaticResource NullToBoolConverter}}" Value="True" />
<Condition Binding="{Binding LastName,
Converter={StaticResource NullToBoolConverter}}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="Button.IsEnabled" Value="True" />
</MultiDataTrigger>
</Style.Triggers>
关于.net - DataTrigger 使 WPF 按钮处于非事件状态,直到 TextBox 具有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4662349/