如何在文本框成为只读时禁用按钮?

时间:2013-06-21 06:24:16

标签: wpf xaml

我在stackpanel里面有一个按钮和文本框,当文本框获得只读状态然后按钮应该禁用,我想在XAML中执行此操作只是有任何方法可以执行此操作吗?

2 个答案:

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

试试这个,它可以按你的需要工作。