WPF, настройка цвета фона с помощью триггера - PullRequest
0 голосов
/ 09 января 2019

У меня есть customcontrol, который отображает текстовое поле. У меня также есть стиль, который устанавливает цвет фона на основе следующих условий:

<Style x:Key="ArtParamStyle" TargetType="av:DC_Base">
    <Setter Property="Background" Value="{StaticResource EditableAreaBrush}" />
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=Info.Upd.IsAutoCalc}" Value="True">
            <Setter Property="Background" Value="Red" />
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=Forced}" Value="True">
            <Setter Property="Background" Value="LightGreen" />
        </DataTrigger>
    </Style.Triggers>
</Style>

Первоначально, так как значение моего текстового поля автоматически рассчитывается, фон правильно красный. Если я также установлю Forced как true (поставив галочку в поле chebckbox), я получу странный результат, граница текстового поля будет светло-зеленой, а фон - нет.

Кажется, это странный цвет, сочетание красного и светло-зеленого. В качестве теста, если я установил цвет "IsAutoCalc" в качестве прозрачного, триггер работает правильно. Как я могу решить это?

1 Ответ

0 голосов
/ 09 января 2019

Ваш код кажется правильным. Но я предоставлю вам мой образец:

XAML:

<Window.Resources>
    <Style x:Key="ArtParamStyle" TargetType="TextBox">
        <Setter Property="Background" Value="Yellow" />
        <Style.Triggers>
            <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding Bool1}" Value="True"/>
                    <Condition Binding="{Binding Bool2}" Value="False"/>
                </MultiDataTrigger.Conditions>
                <Setter Property="Background" Value="Red" />
                <Setter Property="BorderBrush" Value="Red" />
            </MultiDataTrigger>
            <DataTrigger Binding="{Binding Bool2}" Value="True">
                <Setter Property="Background" Value="LightGreen" />
                <Setter Property="BorderBrush" Value="LightGreen" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

<Grid>
    <StackPanel>
        <TextBox Style="{StaticResource ArtParamStyle}" Height="50" Margin="4"/>
        <CheckBox IsChecked="{Binding Bool1}"/>
        <CheckBox IsChecked="{Binding Bool2}"/>
    </StackPanel>
</Grid>

В этом случае я использовал Multidatatrigger для установки красного фона, когда Bool2 (ваш принудительный) не отмечен.

MainWindow.cs:

public partial class MainWindow : Window, INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    private void RaisePropertyChaged(string property)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(property));
        }
    }

    private bool bool1;

    public bool Bool1
    {
        get { return bool1; }
        set { bool1 = value; RaisePropertyChaged("Bool1"); }
    }

    private bool bool2;

    public bool Bool2
    {
        get { return bool2; }
        set { bool2 = value; RaisePropertyChaged("Bool2"); }
    }

    public MainWindow()
    {
        InitializeComponent();

        this.DataContext = this;
    }
}

Возможно, ваша проблема связана с вашим пользовательским элементом управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...