使用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>
答案 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事件,并在处理程序内的代码中设置颜色。