WPF:ListBox项目从下到上显示

时间:2015-01-15 03:31:26

标签: c# wpf listbox

我认为标题不明确 我正在使用WPF并创建custom Messages control。我有message User Control,并且custom Messages control [ListBox]中显示了消息用户控件。 XAML代码:

 <ListBox x:Name="uiMessages" ItemsSource="{Binding Path=Messages}">
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel Orientation="Horizontal" IsItemsHost="True" />
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <wpfMessages:MessageDisplay>

                    </wpfMessages:MessageDisplay>
                </DataTemplate>
            </ListBox.ItemTemplate>
</ListBox>

当前观点:

enter image description here

预期:

enter image description here

现在列表框项目从上到下显示,红色消息后显示空白空间。我会很好,2个绿色信息将在底部为bi,红色信息在顶部。预计从现在开始添加从顶部到顶部的消息。 enter image description here

任何想法?

提前致谢Jamaxack!

2 个答案:

答案 0 :(得分:3)

有点不清楚,但我认为您想要更改ItemsPanel布局。

<ListBox.ItemsPanel>
    <ItemsPanelTemplate>
        <VirtualizingStackPanel VerticalAlignment="Bottom"/>
    </ItemsPanelTemplate>
</ListBox.ItemsPanel>

答案 1 :(得分:2)

创建了反转元素的自定义WrapPanel

XAML代码:

 <ListBox x:Name="uiMessages" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
         <ListBox.ItemsPanel>
              <ItemsPanelTemplate>
                   <wpf:ReverseWrapPanel Orientation="Horizontal"/>
              </ItemsPanelTemplate>
         </ListBox.ItemsPanel>
   </ListBox>

背后的代码

  public class ReverseWrapPanel : WrapPanel
    {
        public new Orientation Orientation { get { return base.Orientation; } set { base.Orientation = value; ResetAll(); } }

        /// <summary>
        /// The opposite of the Orientation property.
        /// </summary>
        Orientation FlipDirection { get { return Orientation == Orientation.Horizontal ? Orientation.Vertical : Orientation.Horizontal; } }

        public ReverseWrapPanel()
        {
            Initialized += ReverseWrapPanel_Initialized;
        }

        void ReverseWrapPanel_Initialized(object sender, System.EventArgs e)
        {
            this.Mirror(FlipDirection);
        }

        protected override void OnVisualChildrenChanged(DependencyObject visualAdded, DependencyObject visualRemoved)
        {
            base.OnVisualChildrenChanged(visualAdded, visualRemoved);

            foreach (UIElement child in Children.OfType<UIElement>())
            {
                child.Mirror(FlipDirection);
            }
        }

        void ResetAll()
        {
            this.Mirror(FlipDirection);

            foreach (UIElement child in Children.OfType<UIElement>())
            {
                child.Mirror(FlipDirection);
            }
        }
    }

Thanx Jamshed!