代码之家  ›  专栏  ›  技术社区  ›  Álvaro García

是否可以修改文本框样式以使用特定的datatrigger?

  •  0
  • Álvaro García  · 技术社区  · 7 年前

    我有一个TextBox,它使用了所有TextBox通用的样式,因此我可以对所有TextBox使用相同的样式。

    但是,在一个特定的文本框中,我需要根据一个条件修改它的可见性,所以我尝试这样做:

    <TextBox 
        Text="{Binding MyBinding, Mode=OneWay}"
        Style="{StaticResource TextBoxStyle1}">
        <TextBox.Style>
            <Style TargetType="StackPanel">
                <Setter Property="Visibility" Value="Visible"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=thisView, Path=DataContext.MyPropertyInViewModel}" Value="3">
                        <Setter Property="Visibility" Value="Collapsed"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBox.Style>
    </TextBox>
    

    我怎么能这么做?

    谢谢。

    1 回复  |  直到 7 年前
        1
  •  2
  •   bwing    7 年前

    并将BasedOn标记添加到新样式BasedOn=“{StaticResource TextBoxStyle1}”

    <TextBox 
        Text="{Binding MyBinding, Mode=OneWay}">
        <TextBox.Style>
            <Style TargetType="StackPanel" BasedOn="{StaticResource TextBoxStyle1}">
                <Setter Property="Visibility" Value="Visible"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=thisView, Path=DataContext.MyPropertyInViewModel}" Value="3">
                        <Setter Property="Visibility" Value="Collapsed"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBox.Style>
    </TextBox>
    

    这将允许您重用现有样式。但是,如果现有样式已经定义了不需要的DataTrigger,则需要为此文本框创建新样式。