WPF - 根据属性是否包含数据启用/禁用tabstop

时间:2011-08-05 19:36:35

标签: wpf .net-4.0

我需要根据绑定属性是否包含数据来设置文本框的tabstop。这些属性几乎都是字符串 - 如果属性为null或为空,我想禁用tabstop。

我正在使用这些文本框的样式。

以下是我目前使用的风格:

<Style TargetType="TextBox" x:Key="FauxLabel">
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="IsTabStop" Value="True" />
    <Setter Property="IsReadOnly" Value="True" /> 
    <!-- rest of setters truncated -->
</Style>

这是我用法的一个例子:

<TextBox
    Name="Account"
    Style="{StaticResource ResourceKey=FauxLabel}"
    Text="{Binding
        Path=SelectedItem.AccountNumber,
        ElementName=CrfResults}"/>

在这个例子中,如果AccountNumber属性为null或为空,我想禁用tabstop。我正在使用Visual Studio 2010和.Net 4.0。任何人都可以帮助我吗?

更新

感谢Rachel的回答。通过添加下面绑定到text属性的触发器而不是底层绑定属性,我能够使用该样式更新样式以处理所有文本框:

        <Style.Triggers>
            <Trigger Property="Text" Value="{x:Null}">
                <Setter Property="IsTabStop" Value="False">                            
                </Setter>
            </Trigger>
            <Trigger Property="Text" Value="">
                <Setter Property="IsTabStop" Value="False">
                </Setter>
            </Trigger>
        </Style.Triggers>

1 个答案:

答案 0 :(得分:0)

使用DataTrigger检查值是否为{x:Null}

<Style TargetType="TextBox" x:Key="FauxLabel">
    <Setter Property="IsTabStop" Value="True" />
    <Style.Triggers>
        <DataTrigger Property="{Binding ElementName=CrfResults, Path=SelectedItem.AccountNumber}" Value="{x:Null}">
            <Setter Property="IsTabStop" Value="False" />
        </DataTrigger>
    </Style.Triggers>
</Style>

您可以使用常规触发器而不是DataTrigger来执行此操作