C# 如何使WPF列表框项目不可单击

C# 如何使WPF列表框项目不可单击,c#,.net,wpf,mvvm,.net-4.0,C#,.net,Wpf,Mvvm,.net 4.0,我使用列表框来显示我在语音激活程序中以编程方式选择的项目列表。是否有任何方法可以防止所选项目被单击?我确实想要鼠标悬停的功能,只是不要点击实际的项目 我已尝试设置可聚焦(不做任何我想要的事情)并禁用(禁用鼠标悬停) 以下是我目前的风格: <Style x:Key="GlyphList" TargetType="ListBox"> <Setter Property="ItemsPanel"> <Setter.Value> &l

我使用列表框来显示我在语音激活程序中以编程方式选择的项目列表。是否有任何方法可以防止所选项目被单击?我确实想要鼠标悬停的功能,只是不要点击实际的项目

我已尝试设置可聚焦(不做任何我想要的事情)并禁用(禁用鼠标悬停)

以下是我目前的风格:

<Style x:Key="GlyphList" TargetType="ListBox">
    <Setter Property="ItemsPanel">
      <Setter.Value>
        <ItemsPanelTemplate>
          <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" IsEnabled="False"/>
        </ItemsPanelTemplate>
      </Setter.Value>
    </Setter>
    <Setter Property="ItemTemplate">
      <Setter.Value>
        <DataTemplate DataType="models:SpellingGlyph">
          <Label VerticalAlignment="Bottom">
            <Label.Template>
              <ControlTemplate>
                <Grid>
                  <TextBlock Name="MainText" Text="{Binding Text}" VerticalAlignment="Bottom" Margin="0,0,5,0"/>
                </Grid>
                <ControlTemplate.Triggers>
                  <DataTrigger Value="True">
                    <DataTrigger.Binding>
                      <MultiBinding Converter="{StaticResource ObjectReferenceEqualityConverter}">
                        <Binding />
                        <Binding Path="SelectedItem" RelativeSource="{RelativeSource FindAncestor, AncestorType=ListBox}"/>
                      </MultiBinding>
                    </DataTrigger.Binding>
                    <Setter TargetName="MainText" Property="Foreground" Value="#75BAFF"/>
                    <Setter TargetName="MainText" Property="FontWeight" Value="SemiBold"/>
                    <Setter TargetName="MainText" Property="FontSize" Value="22"/>
                  </DataTrigger>
                  <DataTrigger Value="True">
                    <DataTrigger.Binding>
                      <MultiBinding Converter="{StaticResource MultiBooleanConverter}"> <!--SelectedItem trumps mouse over-->
                        <Binding ElementName="MainText" Path="IsMouseOver"/>
                        <Binding Path="SelectedItem" RelativeSource="{RelativeSource FindAncestor, AncestorType=ListBox}" Converter="{StaticResource InvertedNullCheckToBooleanConverter}"/>
                      </MultiBinding>
                    </DataTrigger.Binding>
                    <Setter TargetName="MainText" Property="Foreground" Value="#75BAFF"/>
                    <Setter TargetName="MainText" Property="FontWeight" Value="SemiBold"/>
                    <Setter TargetName="MainText" Property="FontSize" Value="22"/>
                  </DataTrigger>
                </ControlTemplate.Triggers>
              </ControlTemplate>
            </Label.Template>
          </Label>
        </DataTemplate>
      </Setter.Value>
    </Setter>
  </Style>

我接受的另一个解决方案是在我的视图模型中添加以下内容:

     if (_viewModelSetSelectedGlyph != value) return;
    _selectedGlyph = value;
    OnPropertyChanged("SelectedGlyph");

然后,在实际设置
SelectedGlyph
之前,每次都设置
\u viewModelSetSelectedGlyph
。然后,当用户界面试图设置
SelectedGlyph
时,它不会成功,只有当视图模型通过同时设置私有变量来设置它时,它才会成功。

只需将
ishitestvisible
设置为
false


只需通过设置ItemContainerStyle来禁用ItemContainer即可。你尝试了什么?更新了我的答案…禁用容器会使鼠标悬停不起作用类似的问题你是否尝试过使其HitTestVisible?@Tejs是的,抱歉忘了指定一个我发誓我在找鼠标下降的地方…只是瞎了眼。我有一个单独的解决方案,我将发布,但实际上我更喜欢它,因为这更像是一个UI问题,而不是我应该在VM中处理的问题
     if (_viewModelSetSelectedGlyph != value) return;
    _selectedGlyph = value;
    OnPropertyChanged("SelectedGlyph");