WPF 更新边框样式块文本触发器



是否可以使用文本框中的触发器更新父边框是否有效?我尝试使用数据模板方法。我不能使用它,因为我正在尝试在数据上下文中传递两个属性。一个用于占位符,另一个用于绑定 User.Email。

如果有更好的方法来实现这一成就,我开始使用 WPF。我也尝试使用这种方法。创建了控件模板并使用ScrollViewer x:Name="PART_ContentHost"但样式不会更新。

关键是如何以更有效的方式保持绑定并更新父边框?

在视野中:

<Border Style="{DynamicResource TextBoxBorderStyle}" >
    <Grid>
        <TextBlock Text="{Binding Path=UserPlaceholder}"
                                   Style="{StaticResource PlaceHolderTextStyle}">
            <TextBlock.Visibility>
                <MultiBinding Converter="{StaticResource textInputToVisibilityConverter}">
                    <Binding ElementName="Email" Path="Text.IsEmpty" />
                    <Binding ElementName="Email" Path="IsFocused" />
                </MultiBinding>
            </TextBlock.Visibility>
        </TextBlock>
        <TextBox Name="Email" 
            Background="Transparent" 
            Style="{StaticResource textBoxBase}"
            Text="{Binding Path=UserCredentials.Email,
            Mode=TwoWay,
            TargetNullValue='',
            ValidatesOnDataErrors=True,
            UpdateSourceTrigger=PropertyChanged}">
        </TextBox>
    </Grid>
</Border>

应用内边框样式:

<Style x:Key="TextBoxBorderStyle"
        TargetType="{x:Type Border}">
    <Setter Property="BorderBrush"
            Value="{DynamicResource TextBoxBorderBrush}"/>
    <Setter Property="Background"
            Value="{StaticResource TextBoxBackgroundBrush}"/>
    <Setter Property="HorizontalAlignment"
            Value="Stretch"/>
    <Setter Property="VerticalAlignment"
            Value="Center"/>
    <Setter Property="BorderThickness"
            Value="2"/>
    <Setter Property="CornerRadius"
            Value="{StaticResource DefaultBorder}"/>
    <Setter Property="Height"
            Value="50"/>
    <Style.Triggers>
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type TextBox}}, Path=Validation.HasError}" Value="True">
            <Setter Property="BorderBrush"
                Value="Red"/>
        </DataTrigger>
    </Style.Triggers>
</Style>

应用内文本块样式:

<Style x:Key="textBoxBase" TargetType="{x:Type TextBox}">
    <Setter Property="HorizontalAlignment"
            Value="Stretch"/>
    <Setter Property="VerticalAlignment"
            Value="Center"/>
    <Setter Property="Foreground"
            Value="{StaticResource TextBoxForegroundBrush}"/>
    <Setter Property="FontSize"
            Value="16"/>
    <Setter Property="Margin"
            Value="{StaticResource DefaultMargin}"/>
    <Setter Property="FontFamily"
            Value="{StaticResource DefaultFontFamily}"/>
    <Setter Property="BorderThickness"
            Value="0"/>
</Style>

若要在控件中显示某些错误元素,需要使用 Validation.ErrorTemplate 附加属性。您可能会发现这篇文章很有用,或者查看MahApps.Metro中的错误模板。

相关内容

  • 没有找到相关文章