Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 仅当元素可见时应用DataTrigger Setter_Wpf_Xaml - Fatal编程技术网

Wpf 仅当元素可见时应用DataTrigger Setter

Wpf 仅当元素可见时应用DataTrigger Setter,wpf,xaml,Wpf,Xaml,我有两个文本框、组合框和一个保存按钮。若用户选择组合框的特定值,则第二个文本框将可见。我有一个验证规则,检查文本框是否为空或空白,如果为空,则禁用“保存”按钮 <Style x:Key="okButtonEnabler" TargetType="Button"> <Setter Property="IsEnabled" Value="True"/> <Style.Triggers>

我有两个文本框、组合框和一个保存按钮。若用户选择组合框的特定值,则第二个文本框将可见。我有一个验证规则,检查文本框是否为空或空白,如果为空,则禁用“保存”按钮

<Style x:Key="okButtonEnabler" TargetType="Button">
                <Setter Property="IsEnabled" Value="True"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Text, ElementName=FirstTextBox, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource IsButtonEnabledConverter}}" Value="0">
                        <Setter Property="IsEnabled" Value="False"/>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding Text, ElementName=SecondTextBox, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource IsButtonEnabledConverter}}" Value="0">
                        <Setter Property="IsEnabled" Value="False"/>
                    </DataTrigger>
                </Style.Triggers>
</Style>

<TextBox Grid.Row="1" Grid.Column="1" Margin="2" Validation.ErrorTemplate="{StaticResource validationTemplate}" Name="FirstTextBox"
            Style="{StaticResource textBoxInError}">
                <TextBox.Text>
                    <Binding Path="FirstValue">
                        <Binding.ValidationRules>
                            <validationRules:EmptyStringValidationRule ErrorMessage="Must enter first value" />
                        </Binding.ValidationRules>
                    </Binding>
               </TextBox.Text>
</TextBox>

<TextBox  Grid.Row="2" Grid.Column="1" Visibility="{Binding IsSecondValueSelected, Converter={StaticResource SecondTextBoxVisiblityConverter}}" Margin="2" Validation.ErrorTemplate="{StaticResource validationTemplate}"
            Style="{StaticResource textBoxInError}" Name="SecondTextBox">
                <TextBox.Text>
                    <Binding Path="SecondValue">
                        <Binding.ValidationRules>
                            <validationRules:EmptyStringValidationRule ErrorMessage="Must enter second value" />
                        </Binding.ValidationRules>
                    </Binding>
                </TextBox.Text>
            </TextBox>


因此,现在,无论第二个文本框是否可见,数据触发器都将应用,按钮将被禁用,直到第二个文本框不为空。仅当第二个文本框可见时,我才需要此场景。

使用MultiDataTrigger组合多个条件

例:


正确!你赢了我。我打算在第二种情况下使用SecondTextBox.Visibility,但两种情况都可以:
<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <Style x:Key="okButtonEnabler"
               TargetType="Button">
            <Setter Property="IsEnabled"
                    Value="True" />
            <Style.Triggers>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding Text, ElementName=FirstTextBox, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource IsButtonEnabledConverter}}" Value="0" />
                        <Condition Binding="{Binding Text, ElementName=SecondTextBox, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource IsButtonEnabledConverter}}"
                                   Value="0" />
                    </MultiDataTrigger.Conditions>

                    <Setter Property="IsEnabled"
                            Value="False" />
                </MultiDataTrigger>
            </Style.Triggers>
        </Style>

    </Window.Resources>
    <Grid>

        <TextBox Grid.Row="1"
                 Grid.Column="1"
                 Margin="2"
                 Validation.ErrorTemplate="{StaticResource validationTemplate}"
                 Name="FirstTextBox"
                 Style="{StaticResource textBoxInError}">
            <TextBox.Text>
                <Binding Path="FirstValue">
                    <Binding.ValidationRules>
                        <validationRules:EmptyStringValidationRule ErrorMessage="Must enter first value" />
                    </Binding.ValidationRules>
                </Binding>
            </TextBox.Text>
        </TextBox>

        <TextBox  Grid.Row="2"
                  Grid.Column="1"
                  Visibility="{Binding IsSecondValueSelected, Converter={StaticResource SecondTextBoxVisiblityConverter}}"
                  Margin="2"
                  Validation.ErrorTemplate="{StaticResource validationTemplate}"
                  Style="{StaticResource textBoxInError}"
                  Name="SecondTextBox">
            <TextBox.Text>
                <Binding Path="SecondValue">
                    <Binding.ValidationRules>
                        <validationRules:EmptyStringValidationRule ErrorMessage="Must enter second value" />
                    </Binding.ValidationRules>
                </Binding>
            </TextBox.Text>
        </TextBox>
    </Grid>
</Window>