由于颜色,列表框中的选定项目不可读

时间:2010-03-24 14:47:45

标签: wpf colors listbox selecteditem background-foreground

我在列表框中动态创建了一个stackpanels集合。在此stackpanel中包含标签和水平对齐的复选框。

问题是,当我点击一个堆叠面板时,选择是不可读的,因为线条变成深蓝色,而字母保持黑色,所以黑色为蓝色,你什么也看不见。 如何动态更改stackpanel中所选元素的前景色?我动态地说而不是在xml文件中,因为所有这些元素都是从数据库中动态创建的。

我的代码类似于:

foreach (var utilis in item.user)
{
    StackPanelWithID ligne = new StackPanelWithID();
    ligne.Orientation = Orientation.Horizontal;
    ligne.ID = utilis.TRIGRAMME;
    ligne.Height = 21;
    Label l = new Label();
    l.Width = 120;
    Label l2 = new Label();
    l2.Width = 145;
    CheckBox cbEntretien = new CheckBox();
}

contentpresenter无法正常工作......我尝试了多种方式来定位它... 所以,我找到了解决问题的方法...... 在app.xaml:

 <Application.Resources>
    <Style TargetType="{x:Type ListBoxItem}">
                        <Style.Resources>
                            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="LightBlue"/>
                        </Style.Resources>
    </Style>
</Application.Resources>

因此,所选项目的背景更清晰,以便用户仍然可以阅读所选列表框项目的文本。

并且每个listboxitem都会受到关注。

然而......我很想知道如何在列表框中更改所选项目的文字颜色..如果我设法得到答案我会让你联系......


我这样做了......

<ControlTemplate TargetType="ListBoxItem">
                    <ContentPresenter>
                        <ControlTemplate.Triggers>

                            <Trigger Property="IsSelected" Value="true">

                            <Setter Property="Background"
                                        Value="Red"/>

                        </Trigger>

                    </ControlTemplate.Triggers>
                        </ContentPresenter>
                </ControlTemplate>

但是stll不工作,它说在ControlTemplate中找不到触发器属性... 我试图在触发器属性之后添加它,但是不能正常工作......


我在App.xaml中尝试过类似的东西: “

<Style x:Key="SimpleListBoxItem" TargetType="ListBoxItem">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListBoxItem">
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsSelected" Value="true">
                                <Setter Property="Background" <!--can't find the text property so try to act on the Background color to set it to a different color than dark blue-->
                                            Value="Red"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>"

并在我的列表框所在的特定xaml文件中:

<ListBox Margin="9,64,8,313" Loaded="lstUtilisateurs_Loaded" Name="lstUtilisateurs" ItemContainerStyle="{StaticResource SimpleListBoxItem}"/>

但是在执行时,列表框中没有任何内容出现,什么都没有......我没有得到它......

1 个答案:

答案 0 :(得分:2)

Dunno如果它仍然重要(最后的回答是在2010年3月25日),但对于仍然想知道如何实现这一点的人我这样做了:

在样式部分:

    <Style x:Key="myLBStyle" TargetType="{x:Type ListBoxItem}">

        <Style.Resources>

            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/> <!-- makes the background color transparent, removes backcolor border-->


            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Red"/> <!-- Sets the textcolor of the selected text to red -->

        </Style.Resources>
    </Style>

在Listbox中我使用了ItemContainerStyle属性,如下所示:

ItemContainerStyle =“{StaticResource myLBStyle}

我找了一会儿找到,但现在是。希望有人可以使用它!

也很方便:

http://msdn.microsoft.com/en-us/library/ms603164.aspx

最诚挚的问候,

萨姆