GridView中的CheckBox背景颜色

时间:2013-11-15 14:46:39

标签: .net wpf gridview checkbox

使用TextBlock和CheckBox的ListView GridView

问题是背景

如果我点击TextBlock那行接收LightBlue背景
LightBlue的背景如果从任何其他行中删除
这就是我想要的行为

问题在于CheckBox
当我点击CheckBox时,LightBlue的背景不会从其他行中删除 当我将鼠标移开该行时,LightBlue背景会消失 我想CheckBox背景颜色像TextBlock 这就像CheckBox正在吃点击以选择行

在CheckBox上尝试Focusable =“False”和“True”并且没有修复它。

<Style.Resources>
    <!-- Background of selected item when focussed -->
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="LightBlue"/>
    <!-- Background of selected item when not focussed -->
    <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="LightBlue" />
</Style.Resources>

<GridViewColumn Width="100">
    <GridViewColumnHeader Content="UserID" HorizontalContentAlignment="Left">
    </GridViewColumnHeader>
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <TextBlock TextWrapping="NoWrap" TextTrimming="CharacterEllipsis" Text="{Binding Path=UserID, Mode=OneWay}"/>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Width="45">
    <GridViewColumnHeader Content="Select" HorizontalContentAlignment="Left">
    </GridViewColumnHeader> 
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <CheckBox Content="" IsChecked="{Binding Path=On, Mode=TwoWay}" 
                      IsEnabled="{Binding Path=OnEnabled, Mode=OneWay}"  VerticalAlignment="Center" />
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

2 个答案:

答案 0 :(得分:0)

我使用的修复程序是绑定SelectedItem,并在CheckBox中指定它 请参阅searchItemUsrFld.FieldDefUsrFldUsrOnSelected = this;
CheckBox正在吃Click,因此ListView没有获得Click

SelectedItem="{Binding Path=SearchItem.FieldDefUsrFldUsrOnSelected}"

public Boolean? On
{   // this does not get saved to db as it is just for search
    get
    {
        return on;
    }
    set
    {
        if (on == value) return;
        on = value;
        searchItemUsrFld.FieldDefUsrFldUsrOnSelected = this;
        NotifyPropertyChanged("On");
    }
}

答案 1 :(得分:0)

我现在看到你在ListViewItem获得焦点时改变了颜色。

当单击TextBlock时,TextBlock没有获得焦点,而是它的父节点,在你的情况下它是ListViewItem。这就是它使用TextBlock的原因。虽然当您单击CheckBox时,CheckBox可能会获得焦点,因此ListViewItem的父级不会获得焦点。此外它不会改变颜色。

解决方案是在ListViewItem级别侦听GotFocus事件,并在处理程序内的代码中设置颜色。