【问题标题】:WPF default text color of Foreground Color for data binding用于数据绑定的前景颜色的 WPF 默认文本颜色
【发布时间】:2017-06-25 04:09:55
【问题描述】:

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

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

数据绑定行的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>

【问题讨论】:

    标签: c# wpf colors


    【解决方案1】:

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

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

    <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。在处理更复杂的场景时,转换器可能很有用。到目前为止,鉴于您问题中的信息,上述内容应该可以正常工作。

    【讨论】:

    • 谢谢你,很好的回答。效果很好。我不知道你在TextBlock 上设置了样式触发器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 2011-10-09
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    相关资源
    最近更新 更多