2014-11-05 63 views
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> 

風格和ok鍵

<Button Content="Ok" x:Name="OkButton" Height="32" Width="80" Command="{Binding OkCommand}"/> 

它工作正常,但我希望每次用戶打開時都無法使按鈕處於禁用狀態,即使它滿足驗證規則,但是該規則也應該應用。

+1

如果我正確理解你的問題,那麼你可以在你的'Command'上使用'CanExecute'來確定'IsEnabled'屬性。 HTH – XAMlMAX 2014-11-05 15:15:51

+0

你怎麼隱藏你的工具窗口?我的意思是關閉或隱藏(使用'Hide()'方法)?當然,如果使用'Close()'方法,則需要重新加載窗口才能打開它。 – 2014-11-05 15:36:35

回答

0

您可以嘗試添加一些DataTrigger使用OneTime模式綁定收聽Visibility屬性,並將IsEnabled設置爲false。該觸發器應置於你的multitrigger後,使其可以覆蓋觸發:

<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代碼中。我希望你知道如何做到這一點。