0

我的应用程序中有一个工具窗口。有一些文本输入可用,我对这些文本框有一些验证规则。比如说,验证规则 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}"/>

它工作正常,但我希望每次用户打开时都禁用该按钮,无论它是否满足验证规则,但也应该应用该规则。

4

1 回答 1

0

您可以尝试使用模式绑定添加一些DataTrigger监听Visibility属性并将其设置为. 此触发器应放置在您的多重触发器之后,以便它可以覆盖该触发器:OneTimeIsEnabledfalse

<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 代码。我希望你知道如何做到这一点。

于 2014-11-05T15:29:18.363 回答