我在stackpanel里面有一个按钮和文本框,当文本框获得只读状态然后按钮应该禁用,我想在XAML中执行此操作只是有任何方法可以执行此操作吗?
答案 0 :(得分:3)
绑定很容易定义,但是你需要一个转换器来反转布尔值。由于您希望在TextBox不是只读时启用(IsEnabled = true
)Button(IsReadOnly = false
)。
<强> XAML 强>
<StackPanel>
<StackPanel.Resources>
<local:InvertBooleanConverter x:Name="invertBoolConverter"/>
</StackPanel.Resources>
<TextBox x:Name=textBox />
<Button IsEnabled={Binding IsReadOnly, ElementName=textBox, Converter={StaticResource invertBoolConverter}}/>
</StackPanel>
local
是您在UserControl中定义的名称空间,指向InvertBooleanConverter的名称空间
xmlns:local="clr-namespace:NamespaceOfTheInvertBooleanConverter"
<强>转换器强>
public class InvertBooleanConverter: IValueConverter {
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
bool currentValue = System.Convert.ToBoolean(value);
return !currentValue;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
bool currentValue = System.Convert.ToBoolean(value);
return !currentValue;
}
}
答案 1 :(得分:1)
<StackPanel>
<TextBox x:Name="targetTB">Hello</TextBox>
<Button Content="Test Button">
<Button.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=targetTB, Path=IsReadOnly}" Value="True">
<Setter Property="Button.IsEnabled" Value="False"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=targetTB, Path=IsReadOnly}" Value="False">
<Setter Property="Button.IsEnabled" Value="True"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</StackPanel>
试试这个,它可以按你的需要工作。