Цвет фона изменяющейся границы для значения Texblock? - PullRequest
0 голосов
/ 25 февраля 2011

Я пытаюсь изменить цвет фона границы на красный, если дочерний текстовый блок получает значение "0". Я пытаюсь использовать GreaterThanZero Converter, но ничего не получается. Мне интересно, если кто-то может помочь. Мне также нужно изменить цвет переднего плана тексблока на белый, если значение больше нуля. Любые идеи высоко ценятся. Заранее спасибо.

Вот мой XAML:

<Grid>
<Border x:Name="TextBoxBorder" BorderThickness="1" Width="30">
   <TextBlock x:Name="TotalTileValue" Text="{Binding TotalItemCount}">
    <TextBlock.Style>      
        <Style>        
            <Style.Triggers>          
                <DataTrigger Binding="{Binding Content, Converter={x:Static local:GreaterThanZeroConverter.Instance}, RelativeSource={RelativeSource Self}}" Value="True" >            
                      <Setter Property="TextBlock.Foreground" Value="White" />  
                      <Setter TargetName="TextBoxBorder" Property="Background" Value="#FFCC0000" />     
                </DataTrigger>        
            </Style.Triggers>      
        </Style>    
    </TextBlock.Style>             
   </TextBlock>
</Border>

1 Ответ

2 голосов
/ 25 февраля 2011

Вы хотите обработать текст TextBox?Попробуйте связать с Text -Property вместо content-Property.

<DataTrigger Binding="{Binding Text, Converter={x:Static local:GreaterThanZeroConverter.Instance}, RelativeSource={RelativeSource Self}}" Value="True" >             

Однако, возможно, это только половина истории.Это зависит от конвертера.Если он обрабатывает строковые значения, он будет делать.

Редактировать
При желании, здесь начнем с того, как создать свой собственный преобразователь значений.Пожалуйста, обратите внимание, я не знаю о ваших точных требованиях.Также я не проверял код.Это должна быть только отправная точка для вашего собственного конвертера:

public class GreaterThanZeroValueConverter : IValueConverter{

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
        if (null == value) {
            return false;
        }
        int intValue = 0;
        if (value is string) {                
            if (!Int32.TryParse((string)value,out intValue)) {
                return false;
            }                
        }
        if (value is int) {
            intValue = (int)value;
        } else {
            throw new InvalidOperationException("Unsupported Type ["+value.GetType().Name+"]");
        }
        return intValue > 0;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
        throw new NotImplementedException();
    }
}
...