WPF用于数据绑定的Foreground Color的默认文本颜色

时间:2017-06-25 04:09:56

标签: c# wpf colors

如何获取WPF控件中文本的默认颜色?我对前景色画笔进行数据绑定,只希望能够在一定条件下改变颜色。

一个简单的例子是当第二列的值为7时,将单元格着色为红色。如果我不知道文本的默认颜色,它与其他单元格略有不同。在下图中,默认画笔为蓝色。我使用Bushes.Black作为非7值。 Slightly Different Color

数据绑定行的C#代码是

    public Brush brush
    {
        get
        {
            if (data2 == 7)
                return Brushes.Red;
            return Brushes.Black;
        }
    }

XAML代码如下。

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <ListView Grid.Row="0" Grid.Column="0" Margin="10,20,10,10" ItemsSource="{Binding data}"                   
              Name="DataList">
        <ListView.View>
            <GridView>
                <GridView.Columns>
                    <GridViewColumn Width="150" DisplayMemberBinding="{Binding Path=data1}">
                        <GridViewColumn.Header>
                            <GridViewColumnHeader Tag="Data1">
                                <TextBlock>Data 1</TextBlock>
                            </GridViewColumnHeader>
                        </GridViewColumn.Header>
                    </GridViewColumn>
                    <GridViewColumn Width="150">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock x:Name="Txt2" Text="{Binding data2}" Foreground="{Binding brush}" />
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                        <GridViewColumn.Header>
                            <GridViewColumnHeader Tag="Data2">
                                <TextBlock>Data 2</TextBlock>
                            </GridViewColumnHeader>
                        </GridViewColumn.Header>
                    </GridViewColumn>
                    <GridViewColumn Width="150" DisplayMemberBinding="{Binding Path=data3}">
                        <GridViewColumn.Header>
                            <GridViewColumnHeader Tag="Data3">
                                <TextBlock>Data 3</TextBlock>
                            </GridViewColumnHeader>
                        </GridViewColumn.Header>
                    </GridViewColumn>
                </GridView.Columns>
            </GridView>
        </ListView.View>
    </ListView>
</Grid>

1 个答案:

答案 0 :(得分:1)

  

只希望能够在特定条件下改变颜色

然后,您应该在应用于控件的样式中使用触发器,以便仅在&#34;特定条件&#34;下设置属性值。例如:

<GridViewColumn Width="150">
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <TextBlock x:Name="Txt2" Text="{Binding data2}">
                <TextBlock.Style>
                    <Style TargetType="TextBlock">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding data2}" Value="7">
                                <Setter Property="Foreground" Value="Red"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </TextBlock.Style>
            <TextBlock/>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
    <GridViewColumn.Header>
        <GridViewColumnHeader Tag="Data2">
            <TextBlock>Data 2</TextBlock>
        </GridViewColumnHeader>
    </GridViewColumn.Header>
</GridViewColumn>

或者,使用转换器绑定到属性,并在不想修改默认值时返回Binding.DoNothing。在处理更复杂的场景时,转换器非常有用。鉴于到目前为止您的问题中的信息,上述情况应该可以正常工作。