C# 删除列表框WPF中的选择
我们使用Caliburn Micro。 我需要在鼠标双击后更改项目的颜色 A这样做:C# 删除列表框WPF中的选择,c#,wpf,xaml,caliburn.micro,C#,Wpf,Xaml,Caliburn.micro,我们使用Caliburn Micro。 我需要在鼠标双击后更改项目的颜色 A这样做: <ListBox.ItemContainerStyle> <Style TargetType="ListBoxItem"> <Style.Triggers> <DataTrigger Binding="{Binding AnswerStatus, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Style.Triggers>
<DataTrigger Binding="{Binding AnswerStatus, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Value="1">
<Setter Property="Background" Value="DarkSeaGreen"/>
<Setter Property="FontWeight" Value="Bold"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding AnswerStatus, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Value="2">
<Setter Property="Background" Value="IndianRed"/>
<Setter Property="FontWeight" Value="Bold"></Setter>
</DataTrigger>
</Style.Triggers>
<Setter Property="cal:Message.Attach" Value="[Event MouseDoubleClick] = [Action AnswerDoubleClick($dataContext)]"/>
</Style>
</ListBox.ItemContainerStyle>
但现在双击后,颜色改变了,但它隐藏在“选择”下,若要查看颜色,需要单击其他项目
如何删除选择?使用ItemsControl而不是Listbox。ItemsControl不支持选择。我不熟悉caliburn.micro,因此下面是通用的wpf/xaml 如果在xaml中将列表框定义为:
<ListBox Name="TheList" MouseDoubleClick="TheList_MouseDoubleClick" DisplayMemberPath="AsString">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Style.Triggers>
<DataTrigger Binding="{Binding AnswerStatus, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Value="1">
<Setter Property="Background" Value="DarkSeaGreen"/>
<Setter Property="FontWeight" Value="Bold"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding AnswerStatus, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Value="2">
<Setter Property="Background" Value="IndianRed"/>
<Setter Property="FontWeight" Value="Bold"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
您的列表框项目视图模型为:
public class MyItem : INotifyPropertyChanged
{
private int m_value;
public int Value
{
get { return m_value; }
set
{
m_value = value;
OnPropertyChanged("Value");
OnPropertyChanged("AsString");
}
}
public string AsString
{
get
{
return ToString();
}
}
private int m_answerStatus;
public int AnswerStatus
{
get { return m_answerStatus; }
set
{
m_answerStatus = value;
OnPropertyChanged("AnswerStatus");
OnPropertyChanged("AsString");
}
}
public void SwapStatus()
{
AnswerStatus = m_answerStatus == 1 ? 2 : 1;
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string property)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
}
public override string ToString()
{
return $"MyItem: {Value} {AnswerStatus}";
}
}
(TheList.ItemsSource=Enumerable.Range(1,5)。选择(i=>newmyitem{Value=i,AnswerStatus=i%2+1});
)
它会有用的。以下是对我有用的东西。 在列表框中,资源绑定
IsSelected
属性:
<ListBox.Resources>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/>
</Style>
</ListBox.Resources>
现在只要将该项设置为IsSelected=false
,您就可以在任何需要的地方进行设置了。
在我的例子中,我需要一个列表,一旦所选项目的数量达到某个预定义的数量,它将不允许您选择更多的项目。因此,在我的例子中,我在
SelectChanged
事件处理程序中设置了条件,如果条件不满足,则通过将所选项目的IsSelected设置回false,基本上不允许进一步选择 我尝试将Selectedindex绑定到ViewModel,并在双击时将其设置为-1,但没有帮助…只需为项目提供自定义数据模板,但我需要从列表中选择项目,我只想在双击后删除选择样式或在双击后删除选择。现在的工作方式。按选择隐藏:单击其他项目时
<ListBox.Resources>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/>
</Style>
</ListBox.Resources>