我有两个文本框和一个按钮.如果其中任何一个框为空或空格,则应禁用该按钮.
<TextBox Name="firstNameTxtBox" />
<TextBox Name="lastNameTxtBox" />
<Button Content="Save" Command="{Binding Save}" Style="{StaticResource saveButtonEnabler}" />
Run Code Online (Sandbox Code Playgroud)
和saveButtonEnabler资源:
<UserControl.Resources>
<converters:IsButtonEnabledConverter x:Key="isButtonEnabledConverter" />
<Style x:Key="saveButtonEnabler" TargetType="Button">
<Setter Property="IsEnabled" Value="False"/>
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding ElementName=firstNameTxtBox, Path=Text.Length, Converter={StaticResource isButtonEnabledConverter}}" Value="???" />
<Condition Binding="{Binding ElementName=lastNameTxtBox, Path=Text.Length, Converter={StaticResource isButtonEnabledConverter}}" Value="???" />
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="True"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
Run Code Online (Sandbox Code Playgroud)
转换器被适当调用,但我不知道如何将结果设置Value为Condition.
public class IsButtonEnabledConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (int)value == 0 ? false : true;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)
实际上你需要使用2个触发器将IsEnabled设置为false.您当前的实现是AND,您想要的是OR.
<TextBox x:Name="firstNameTxtBox"/>
<TextBox x:Name="lastNameTxtBox"/>
<Button Content="Save">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<DataTrigger Binding="{Binding Text.Length, ElementName=firstNameTxtBox, UpdateSourceTrigger=PropertyChanged}" Value="0">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
<DataTrigger Binding="{Binding Text.Length, ElementName=lastNameTxtBox, UpdateSourceTrigger=PropertyChanged}" Value="0">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
Run Code Online (Sandbox Code Playgroud)
如果你想使用valueconverter方法,你需要做的就是在触发器绑定中使用'True'作为值
<Condition Binding="{Binding ElementName=firstNameTxtBox, Path=Text.Length, Converter={StaticResource isButtonEnabledConverter}}" Value="True" />
<Condition Binding="{Binding ElementName=lastNameTxtBox, Path=Text.Length, Converter={StaticResource isButtonEnabledConverter}}" Value="True" />
Run Code Online (Sandbox Code Playgroud)
IsEnabled如果有一个按钮,可以使用按钮的属性TextBox:
<Button Content="Save" Command="{Binding Save}"
IsEnabled="{Binding ElementName=firstNameTxtBox, Path=Text.Length, Mode=OneWay}" />
Run Code Online (Sandbox Code Playgroud)
对于这两种方法,请TextBoxes尝试以下操作(您无需使用converter):
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding ElementName=firstNameTxtBox, Path=Text.Length, Mode=OneWay}" Value="0"/>
<Condition Binding="{Binding ElementName=lastNameTxtBox, Path=Text.Length, Mode=OneWay}" Value="0"/>
</MultiDataTrigger.Conditions>
Run Code Online (Sandbox Code Playgroud)
您的完整代码为:
<TextBox Name="firstNameTxtBox" />
<TextBox Name="lastNameTxtBox" />
<Button Content="Save" Command="{Binding Save}" >
<Button.Style>
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding ElementName=firstNameTxtBox, Path=Text.Length, Mode=OneWay}" Value="0"/>
<Condition Binding="{Binding ElementName=lastNameTxtBox, Path=Text.Length, Mode=OneWay}" Value="0"/>
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="False"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7543 次 |
| 最近记录: |