2012-08-14 1 views
2

Я пытаюсь растянуть содержимое, которое находится в панели обложки, не теряя возможности многострочного перевода. Мое намерение состоит в том, что если контент меньше ширины экрана, он растягивает любой неопределенный контент для заполнения. Это возможно? Это было сделано в другом месте?Пользовательские обертки для растягивания контента

Код я написал до сих пор:

protected override System.Windows.Size ArrangeOverride(System.Windows.Size finalSize) 
    { 
     if (this.Children.Count == 0) 
      return base.ArrangeOverride(finalSize); 
     if (FlexibleColumn == null) 
      return base.ArrangeOverride(finalSize); 

     double totalWidth = 0; 

     for (int i = 0; i > Children.Count; i++) 
     { 
      if (i == FlexibleColumn) 
       continue; 
      totalWidth = totalWidth + Children[i].DesiredSize.Width; 
     } 

     if (totalWidth < finalSize.Width) 
     { 
      Children[FlexibleColumn].DesiredSize.Width = finalSize.Width - totalWidth; 
     } 

     return base.ArrangeOverride(finalSize); 
    } 

Однако дети только для получения, не устанавливая. Любые другие могут манипулировать им как этот пункт?

Благодаря

+1

Попробуйте настроить DesiredSize на новый объект размера? – Belmiris

+0

@Belmiris свойство * DesiredSize * имеет значение get-only. – McGarnagle

+0

Попробуйте использовать [UniformGrid] (http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.uniformgrid.aspx). Если вы не рассматриваете overloaing [MeasureOverride] (http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.measureoverride.aspx) – dvvrd

ответ

0

Есть много пользовательских wrappanels: (http://www.codeproject.com/Articles/32629/A-better-panel-for-data-binding-to-a-WrapPanel-in)

В основном вы должны переписать метод MeasureOverride

Наконечник должен установить ItemWidth свойство, которое существует в WrapPanel. например:

if (Orientation == Orientation.Horizontal) 
{ 
    double supostWidth = 0.0; 
    foreach (UIElement el in Children) 
    { 
     el.Measure(availableSize); 
     Size next = el.DesiredSize; 
     if (!(Double.IsInfinity(next.Width) || Double.IsNaN(next.Width))) 
     { 
      supostWidth = Math.Max(next.Width, supostWidth); 
     } 
    } 

    double totalWidth = availableSize.Width; 

    if (!double.IsNaN(supostWidth) && !double.IsInfinity(supostWidth) && supostWidth > 0) 
    { 
     var itemsPerRow = (int)(totalWidth/supostWidth); 
     if (itemsPerRow > 0) 
     { 
      ItemWidth = totalWidth/itemsPerRow; 
     } 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^