VisualBrush с Datatrigger не работает в WPF - PullRequest
1 голос
/ 27 июня 2011

Я пошутил сценарий этого кода, чтобы показать вспомогательный текст в поле перед тем, как поле будет заполнено пользователем (также планирую использовать его модификацию, чтобы показать ошибку проверки, если она возникнет), но триггер нет, хорошо, вызывая. Что не так с этим кодом?

XAML:

<TextBox x:Name="firstName" Validation.Error="Text_ValidationError"
             Text="{Binding UpdateSourceTrigger=LostFocus, Path=firstName, ValidatesOnDataErrors=true, NotifyOnValidationError=true}" Margin="30,12,50,245">
        <TextBox.Style>
            <Style TargetType="TextBox" >
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=firstName}" Value="">
                        <Setter Property="Background">
                            <Setter.Value>
                                <VisualBrush Stretch="None">
                                    <VisualBrush.Visual>
                                        <TextBlock Text="First name" />
                                    </VisualBrush.Visual>
                                </VisualBrush>
                            </Setter.Value>
                        </Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBox.Style>
    </TextBox>

1 Ответ

1 голос
/ 27 июня 2011

Не используйте DataTrigger для этого, в этом нет необходимости (привязка может быть нарушена, на самом деле это единственное, о чем я могу подумать, это может привести к тому, что это не сработает), используйте обычный Trigger:

<Trigger Property="Text" Value="">
    <Setter Property="Background">
        <Setter.Value>
            <VisualBrush Stretch="None">
                <VisualBrush.Visual>
                    <TextBlock Text="First name" />
                </VisualBrush.Visual>
            </VisualBrush>
        </Setter.Value>
    </Setter>
</Trigger>

Протестировал, все работает. Это также имеет то преимущество, что фон исчезает сразу после того, как пользователь начинает печатать, а не когда теряется фокус на элементе управления и обновляется исходная строка.

...