0

我在堆栈面板中有一个按钮和文本框,当文本框变为只读状态时,该按钮应该禁用,我只想在 XAML 中执行此操作有什么办法吗?

4

2 回答 2

3

绑定很容易定义,但您需要一个转换器来反转布尔值。由于您想IsEnabled = true在 TextBox 不是只读 ( IsReadOnly = false) 时启用 ( ) Button。

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;
  }
}
于 2013-06-21T06:27:50.207 回答
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>

试试这个,它可以根据您的需要工作。

于 2013-06-21T07:02:12.213 回答