【问题标题】:Selecting a partially displayed WPF checkbox选择部分显示的 WPF 复选框
【发布时间】:2016-09-02 22:01:44
【问题描述】:

我遇到了设计问题,我知道必须有办法让它发挥作用。我在这里尝试了解决方案:Annoying auto scroll of partially displayed items in WPF ListView 但他们没有为我工作,因为我不允许在代码隐藏中工作。 我有来自 wpf ListBox 的项目列表。像这样:

当我尝试在第 5 行选择 CheckBox 时,Window 以它为中心但不检查它。经过进一步测试,我发现只要项目的底部边框不在视图中,它就不会选择CheckBox

这是ListBox 及其Style 的xaml:

<ListBox Grid.Column="0" Grid.Row="1" Name="RequestCheckoutV"
         ItemsSource="{Binding Path=CheckoutVM, Mode=TwoWay, IsAsync=True}"
         SelectedItem="{Binding Path=SelectedPermit}"
         BorderThickness="0"
         KeyboardNavigation.TabNavigation="Continue">
  <ListBox.ItemContainerStyle>
    <Style TargetType="{x:Type ListBoxItem}">
      <Setter Property="KeyboardNavigation.IsTabStop" Value="False" />
      <Setter Property="Background" Value="Transparent" />
      <Setter Property="Control.HorizontalContentAlignment" Value="Center"/>
      <Setter Property="Control.VerticalContentAlignment" Value="Top"/>
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="{x:Type ListBoxItem}"  >
            <ContentPresenter />
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
  </ListBox.ItemContainerStyle>
</ListBox>

我能做些什么来使它选中复选框而不是仅仅居中? 任何帮助表示赞赏。

【问题讨论】:

  • 如果需要其他信息,请告诉我。我将提供解决问题所需的一切。
  • 在不告诉我为什么不帮助我的情况下给问题一个负面的观点。如果问题有问题,请告诉我,以便我解决。谢谢。
  • ClickMode="Press" 属性添加到 CheckBox 以实现 HitTestVisibility
  • 成功了,克里斯!将其添加为解决方案,以便我可以给您赏金
  • 我知道伙计,我试图让你保持你的观点。 :)

标签: c# wpf xaml checkbox listbox


【解决方案1】:

因此,通过ClickMode="Press" 将“Press”的规范添加到ClickMode 属性到CheckBox,您就是在告诉该对象基本上忽略该事件,否则会被列表项模板劫持。现在它将为自己而不是列表项接受其命中区域中的第一个事件,因为它的默认值为“发布”。干杯:)

【讨论】:

  • 有一个简单的方法来阻止它居中吗?现在,订单项跳到中心的方式有点迷失方向......
  • @tCoe 嗯,如果我记得上次我必须摆脱它,我只是通过设置 ScrollViewer.CanContentScroll="False" 并禁用 ListBox 上的 ScrollViewer 并将其嵌入到单独的像 &lt;ScrollViewer&gt;&lt;ListBox/&gt;&lt;/ScrollViewer&gt; 这样的 ScrollViewer 只是删除该功能。否则,我不记得有任何特定属性可以关闭该“功能”。当时我很着急,但如果我没记错的话,它作为一种解决方法效果很好。
  • ScrollViewer.CanContentScroll = "false" 成功了。不必做禁用部分。再次感谢克里斯。
  • 不费吹灰之力,向前支付 :)
  • 你能看看这个吗? stackoverflow.com/questions/50219002/…
【解决方案2】:

尝试添加到您的.ItemContainerStyle

<ListView.ItemContainerStyle>
    <Style TargetType="{x:Type ListViewItem}">
        <Style.Triggers>
            <Trigger Property="IsKeyboardFocusWithin" Value="True">
                <Setter Property="IsSelected" Value="True"></Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
</ListView.ItemContainerStyle>

这将有效地将焦点集中在您点击的任何内容上。

【讨论】:

  • 在 ListView 中找不到 ItemContainerStyle。我正在使用列表框。我应该将它们全部切换到列表视图吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多