更改嵌入在CellTemplate中的文本框的前景

时间:2014-12-30 17:21:37

标签: c# wpf

我正在尝试更改文本框的前景色(文本颜色),如果选择了listviewitem,则该文本框是GridViewColumn.CellTemplate的数据窗口:

<ListView ItemsSource="{Binding Components}"
                          Style="{StaticResource PrimaryListViewStyle}"
                          ItemContainerStyle="{DynamicResource ListViewItemContainerStyle}"
                          Width="150"
                          MinHeight="150"
                          SelectionMode="Single"
                          cal:Message.Attach="[Event SelectionChanged]=[Action ActivateAttributesView($this.SelectedItem)]">
                    <ListView.View>
                        <GridView ColumnHeaderContainerStyle="{StaticResource PrimaryGridViewColumnHeaderStyle}">
                            <GridViewColumn Header="Component Name">
                                <GridViewColumn.CellTemplate>

                                   <DataTemplate DataType="{x:Type viewModels:ComponentViewModel}">
                                        <TextBox Text="{Binding Name}">
                                            <TextBox.Resources>
                                                <Style TargetType="{x:Type TextBox}">
                                                    <Style.Triggers>
                                                        <Trigger Property="ListViewItem.IsSelected"
                                                                 Value="False">
                                                            <Setter Property="Foreground"
                                                                    Value="Green" />
                                                        </Trigger>
                                                        <Trigger Property="ListViewItem.IsSelected"
                                                                 Value="True">
                                                            <Setter Property="Foreground"
                                                                    Value="Black" />
                                                        </Trigger>
                                                    </Style.Triggers>
                                                </Style>
                                            </TextBox.Resources>
                                        </TextBox>
                                    </DataTemplate>

                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                        </GridView>
                    </ListView.View>
                </ListView>

这是一张图片。不幸的是我不允许直接粘贴图像......:

http://de.tinypic.com/r/262s8bb/8

所选行中的文本应显示为“黑色”。

THX。

3 个答案:

答案 0 :(得分:1)

您的样式具有应用于其的TextBox的触发器。 TextBox不知道是否选择了包含ListViewItem,因此这不会起作用。

要获得与包含ListViewItem的连接,您可以使用 DataTrigger ,让 RelativeSource 表达式沿着可视树向上移动,直到找到ListViewItem并绑定到它的IsSelected属性:

<Style TargetType="{x:Type TextBox}">
    <Setter Property="Foreground" Value="Green" />
    <Style.Triggers>
        <DataTrigger
            Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}, Path=IsSelected}"
            Value="True">
            <Setter Property="Foreground"
                    Value="Black" />
        </DataTrigger>
    </Style.Triggers>
</Style>

答案 1 :(得分:0)

我认为你需要一个DataTrigger

<Style.Triggers>
    <DataTrigger Binding="{Binding IsSelected}" 
        Value="True">
        <Setter Property="FontFamily" Value="Segoe UI Semilight"/>
        <Setter Property="FontSize" Value="16"/>
    </DataTrigger>
</Style.Triggers>

答案 2 :(得分:0)

  1. TextBox listen Foreground已从ListViewItem更改

           <Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
                <Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}, Path=Foreground}" />
            </Style>
    
  2. 当IsSelected属性发生变化时,ListViewItem更改了前景

           <Style TargetType="ListViewItem">
                <Setter Property="Foreground" Value="Green" />
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Foreground" Value="Black" />
                    </Trigger>
                </Style.Triggers>
            </Style>