我的应用程序中有一个工具窗口。有一些文本输入可用,我在这些文本框上有一些验证规则。 说, 验证规则1 验证规则2 验证规则3
我在该工具窗口上有一个按钮,下面有一个样式
<StackPanel.Resources>
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource ButtonStyle}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding ElementName=HeightTextbox, Path=(Validation.HasError)}" Value="false" />
<Condition Binding="{Binding ElementName=WeightTextBox, Path=(Validation.HasError)}" Value="false" />
<Condition Binding="{Binding ElementName=HeartRateTextBox, Path=(Validation.HasError)}" Value="false" />
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="true"/>
</MultiDataTrigger>
</Style.Triggers>
<Setter Property="IsEnabled" Value="false" />
</Style>
</StackPanel.Resources>
和确定按钮
<Button Content="Ok" x:Name="OkButton" Height="32" Width="80" Command="{Binding OkCommand}"/>
它工作正常,但我希望每次用户打开时都不会禁用该按钮,而不是满足验证规则但是也应该应用该规则。
答案 0 :(得分:0)
您可以尝试使用DataTrigger
模式绑定添加一些Visibility
监听OneTime
属性,并将IsEnabled
设置为false
。此触发器应放在多重触发器之后,以便它可以覆盖该触发器:
<Style.Triggers>
<!-- your multi trigger ... -->
<DataTrigger Property="{Binding Visibility,
RelativeSource={RelativeSource Self},
Mode=OneTime}" Value="Visible">
<Setter Property="IsEnabled" Value="false" />
</DataTrigger>
</Style.Triggers>
上述方法只有在您通过调用Close()
方法隐藏工具窗口时才有效,因此下次打开窗口时,它将首先加载。
如果您使用Hide()
方法隐藏工具窗口并使用Show()
再次打开它,则可以尝试使用以下代码:
<sys:Boolean x:Key="f">false</sys:Boolean>
<Style.Triggers>
<!-- your multi trigger ... -->
<Trigger Property="Visibility" Value="Visible">
<Setter Property="IsEnabled" Value="{Binding Resources[f],
RelativeSource={RelativeSource AncestorType=StackPanel},
Mode=OneTime}"/>
</Trigger>
</Style.Triggers>
请注意这里使用的前缀sys
,您必须将命名空间System
导入XAML代码。我希望你知道怎么做。