自定义列表框设计

时间:2014-10-08 07:28:21

标签: c# listbox windows-phone-8.1

我有一份我想要呈现的日期列表。最初我想过使用datepicker但它没有最大天数或最大月数(难以置信),这对我来说是一个要求。 因此,我想到生成自己的日期并将其呈现给用户。 以下是我想要显示它的方式  enter image description here

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

问题

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

  1. 有没有xaml方法可以做到这一点?
  2. 除了确定位置之外的任何其他逻辑?我觉得这个逻辑非常粗糙。一个好的将是一个碰撞盒或由这些线表示的东西,当一个项目击中它时,它被选中
  3. 提前致谢

1 个答案:

答案 0 :(得分:0)

所以经过3天左右的捣乱后,我发现以下解决方案很有用

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

     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);
    }
    
  2. 一旦你有了这个,就每次滚动调用

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

    此功能将为您提供所有元素。说实话,我不只是得到那个元素我基本上得到页面上垂直落在同一个地方的所有内容。也许我做错了什么。但好消息是我只得到一个列表框项目。很容易循环。

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

    希望这有助于某人

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