none
Аналог WaterMark в чистом WPF RRS feed

Ответы

  • Дополнительные Framework'и ставят когда не могут/не хотят сделать сами, поэтому сделать возможно все и не одним способом.

    Например я не так давно использовал такой подход:

    <TextBox Name="FindText" Background="{Binding ElementName=FindText, Path=Text, Converter={StaticResource TextBoxTextToBackgroundConverter},ConverterParameter={StaticResource TxtPoisk}}">

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

    И код конвертера (на VB):

    Public Class TextBoxTextToBackgroundConverter
        Implements IValueConverter
        Public Function Convert(ByVal value As Object, ByVal targetType As Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.Convert
            If CType(value, String) ="" Then
                Dim vbr As New VisualBrush
                vbr.Stretch = Stretch.None
                vbr.Opacity = 0.1
                Dim tb As TextBlock = CType(parameter, TextBlock)
                vbr.Visual = tb
                Return vbr
            Else
                Dim sb As New SolidColorBrush(Color.FromRgb(255, 255, 255))
                Return sb
            End If
        End Function
        Public Function ConvertBack(ByVal value As Object, ByVal targetType As Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
            Return Nothing
        End Function
    End Class

    В конвертере проверяем если значение переданное как Value (это содержимое элемента) пустое, то создаем VisualBrush из текста переданного в качестве параметра. В противном случае, ставим фон белым.

    Это грубоватый вариант, заточенный под конкретную задачу, но зато быстрый. А в идиале делать отдельный контрол с такой возможностью.


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Помечено в качестве ответа developers_s 13 августа 2012 г. 10:56
    12 августа 2012 г. 11:09
    Отвечающий