【问题标题】:Changing color of HighlightBrushKey in XAML在 XAML 中更改 HighlightBrushKey 的颜色
【发布时间】:2023-04-07 01:59:02
【问题描述】:

我有以下问题。

ListView 中的背景颜色设置为 LightGreen 或 White,无论 boolflag 是 true 还是 false。

Example Screen

Window1.xaml:

<Window.Resources>

    <Style TargetType="{x:Type ListViewItem}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=BoolFlag}" Value="True">
                <Setter Property="Background" Value="LightGreen" />
            </DataTrigger>
        </Style.Triggers>
    </Style>

</Window.Resources>

<StackPanel>
    <ListView ItemsSource="{Binding Path=Personen}" SelectionMode="Single" SelectionChanged="ListViewSelectionChanged">
        <ListView.View>
            <GridView>
                <GridViewColumn DisplayMemberBinding="{Binding Path=Vorname}" Header="Vorname" />
                <GridViewColumn DisplayMemberBinding="{Binding Path=Nachname}" Header="Nachname" />
                <GridViewColumn DisplayMemberBinding="{Binding Path=Alter}" Header="Alter" />
                <GridViewColumn DisplayMemberBinding="{Binding Path=BoolFlag}" Header="BoolFlag" />
            </GridView>
        </ListView.View>
    </ListView>
</StackPanel>

Window1.xaml.cs:

public partial class Window1 : Window
{
    private IList<Person> _personen = new List<Person>();

    public Window1()
    {
        _personen.Add(new Person 
                {
                    Vorname = "Max",
                    Nachname = "Mustermann",
                    Alter = 18,
                    BoolFlag = false,
                });

        _personen.Add(new Person 
                {
                    Vorname = "Karl",
                    Nachname = "Mayer",
                    Alter = 27,
                    BoolFlag = true,
                });

        _personen.Add(new Person 
                {
                    Vorname = "Josef",
                    Nachname = "Huber",
                    Alter = 38,
                    BoolFlag = false,
                });

        DataContext = this;

        InitializeComponent();
    }

    public IList<Person> Personen
    {
        get
        {
            return _personen;
        }
    }

    private void ListViewSelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        Person person = e.AddedItems[0] as Person;

        if (person != null)
        {
            if (person.BoolFlag)
            {
                this.Resources[SystemColors.HighlightBrushKey] = Brushes.Green;
            }
            else
            {
                this.Resources[SystemColors.HighlightBrushKey] = Brushes.RoyalBlue;
            }
        }
    }
}

Person.cs:

public class Person
{
    public string Vorname { get; set; }

    public string Nachname { get; set; }

    public int Alter { get; set; }

    public bool BoolFlag { get; set; }
}

现在我想根据 boolflag 设置所选项目的突出显示颜色。 在代码隐藏中,我这样做:

private void ListViewSelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        Person person = e.AddedItems[0] as Person;

        if (person != null)
        {
            if (person.BoolFlag)
            {
                this.Resources[SystemColors.HighlightBrushKey] = Brushes.Green;
            }
            else
            {
                this.Resources[SystemColors.HighlightBrushKey] = Brushes.RoyalBlue;
            }
        }
    }
}

这很好用,但现在我想在 XAML 文件中定义上面的代码。

<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green" />

我可以覆盖默认值。但是,它可以工作,但所有选定项目的颜色都设置为绿色。我尝试了不同的方法来在 XAML 中根据 boolflag 在绿色和蓝色之间切换 HighlightBrushKey 的颜色,但我没有成功。

你能帮我举几个例子吗?

【问题讨论】:

    标签: wpf xaml listview colors


    【解决方案1】:

    不知道为什么 highlightBrushKey 不那么灵活。出于类似的原因,我打开了另一种通过使用边框设置所选项目背景颜色的方法。你可以看看这个http://vbcity.com/blogs/xtab/archive/2009/06/28/background-color-for-wpf-listbox-selected-item.aspx

    【讨论】:

    • 让我开心:) 谢谢!我太专注于那个 HighlightBrushKey,我想得太复杂了。现在可以了。
    猜你喜欢
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    相关资源
    最近更新 更多