C# 删除列表框WPF中的选择

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

我们使用Caliburn Micro。 我需要在鼠标双击后更改项目的颜色

A这样做:

<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>