Изменение цвета фона с помощью конвертера в XAML - PullRequest
0 голосов
/ 03 ноября 2019

TextBlock цвет фона не меняется.

Я привязал свои данные к TextBlock, который обновляется с INotifyPropertyChanged, и конвертер срабатывает.

public class Oddsindicator : IMultiValueConverter
{

    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        string myPrice = "0";
        string tradePrice = "0";

        var colorRed = (System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString("#FFB0E0E6");
        var colorWhite = (System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString("White");

        var unchanged = new SolidColorBrush(colorRed);
        var changed = new SolidColorBrush(colorGreen);

        if (values[0] != DependencyProperty.UnsetValue)
        {
            myPrice = values[0].ToString();
            tradePrice = values[1].ToString();
        }

        if (myPrice == tradePrice)
        {
            return unchanged;
        }
        else
        {
            return changed;
        }
    }
}

XAML:

<Window.Resources>

    <local:Oddsindicator x:Key="Oddsindicator" >

    </local:Oddsindicator>

</Window.Resources>

<TextBlock Text="{Binding BackPrice, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"  TextAlignment="Center" Margin="1"  Grid.Row="4" Grid.Column="2" />
<TextBlock>
    <TextBlock.Background>
        <MultiBinding Converter="{StaticResource Oddsindicator}">

            <Binding Path="BackPrice"/>
            <Binding Path="Lasttradedprice" />

        </MultiBinding>
    </TextBlock.background>
</TextBlock>

Я использовал точки останова на обратном пути, и они оба стреляют. Мое связанное значение обновляется отлично. Преобразователи сравнивают значения и дают правильные результаты, просто не обновляя TextBlock.

1 Ответ

1 голос
/ 03 ноября 2019

(На самом деле это должен быть комментарий, но мне нужны функции форматирования ответа)

У вас есть два текстовых блока. Второй (для которого вы устанавливаете фон) не имеет текста и, вероятно, имеет размер 0. Попробуйте вставить TextBlock.Background в первый текстовый блок:

<TextBlock Text="{Binding BackPrice, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"  TextAlignment="Center" Margin="1"  Grid.Row="4" Grid.Column="2" >
    <TextBlock.Background>
        <MultiBinding Converter="{StaticResource Oddsindicator}">
            <Binding Path="BackPrice"/>
            <Binding Path="Lasttradedprice" />
        </MultiBinding>
    </TextBlock.Background>
</TextBlock>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...