我有一个要列出的日期列表。最初,我想到使用datepicker,但它没有最大天数或最大月数(令人难以置信),这是我的要求。
因此,我想生成自己的日期并将其呈现给用户。
下面是我要如何显示它
 

我目前正在使用列表框。我尝试了组合框,网格视图,但是所有这些都面临着相同的问题

问题

当日期在两条蓝线下时,我想将其设置为选中状态。我能想到的唯一方法是使用代码,方法是获取行的位置,然后获取列表框中每个项目的位置,以确定哪个属于该范围。


有没有xaml的方法可以做到这一点?
除了确定位置之外,还有其他逻辑吗?我发现这种逻辑非常粗糙。一个不错的选择是拥有一个碰撞箱或由这些线条表示的东西,当它被击中时,它就会被选中


提前致谢

最佳答案

因此,经过大约三天的摸索之后,我发现以下解决方案很有用


首先找到位于两条线之间的中点。 (找到水平中点,然后找到垂直中点)。我使用以下代码找到了中点

 private void DetermineSelectionLineBoundaries()
 {
  if (SelectionBoundaryUpper == null || HorizontalScrollPanel == null)
  {
   return;
  }

    var transform = SelectionBoundaryUpper.TransformToVisual(Window.Current.Content);
    _upperStart = transform.TransformPoint(new Point(0, 0));
    _upperEnd = new Point(_upperStart.X + 100, _upperStart.Y);

    var lowertransform = SelectionBoundaryLower.TransformToVisual(Window.Current.Content);
    _lowerStart = lowertransform.TransformPoint(new Point(0, 0));

    var midPointHorizontal = CalculateMidpoint(_upperStart, _upperEnd);
    var midPointVertical = CalculateMidpoint(_lowerStart, _upperStart);
    _midPoint = new Point(midPointHorizontal.X, midPointVertical.Y);
}

一旦有了,在每次滚动调用时

VisualTreeHelper.FindElementsInHostCoordinates(_midPoint, Window.Current.Content).ToList();


此功能将为您提供所有要素。老实说,我不仅仅获得该元素,我基本上将页面上所有垂直于该点放置在同一位置上的东西。也许我做错了。但好消息是我只得到一个列表框项目。如此容易遍历。


完成后,只需打开IsSelected标志。

希望这可以帮助某人

我找不到任何xaml方式来做到这一点。

07-28 02:38
查看更多