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}"/>

正常に動作していますが、検証ルールを満たしているかどうかに関係なく、ユーザーが開くたびにボタンを無効にしたいのですが、ルールも適用する必要があります。

4

1 に答える 1

0

モード バインディングを使用してプロパティDataTriggerにリスニングを追加し、 を に設定してみてください。このトリガーは、そのトリガーをオーバーライドできるように、マルチトリガーの後に配置する必要があります。VisibilityOneTimeIsEnabledfalse

<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>

ここで使用されているプレフィックスについて注意してください。名前空間を XAML コードsysにインポートする必要があります。Systemこれを行う方法を知っていることを願っています。

于 2014-11-05T15:29:18.363 に答える