CustomMessageBox中的列表框始终向上滚动

时间:2014-08-14 12:50:43

标签: c# windows windows-phone-8 listbox messagebox

我对列表框有一个奇怪的问题,列表框放在custommessagebox中。

问题:您无法向下滚动列表,因为" draggesture"起来做同样的事情而不是下来。所以我唯一得到的就是你在列表顶部的响应动画。

我做了一些示例:

<!--LayoutRoot is the root grid where all page content is placed-->
<Grid x:Name="LayoutRoot" Background="Transparent">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>


    <!--TitlePanel contains the name of the application and page title-->
    <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
        <TextBlock Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}" Margin="12,0"/>
        <TextBlock Text="page name" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
    </StackPanel>

    <!--ContentPanel - place additional content here-->
    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">

        <Button Background="Bisque" Content="Click Me" Click="Button_Click"></Button>

    </Grid>
</Grid>

public partial class MainPage : PhoneApplicationPage
{
    // Constructor
    public MainPage()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        var source = new string[200];

        for (int i = 0; i < source.Length; i++)
        {
            source[i] = i.ToString();
        }

        var dialog = new CustomMessageBox()
        {
            Content = new ListBox(){ItemsSource = source},
            RightButtonContent = "Cancel",
            LeftButtonContent = "Store",
            VerticalContentAlignment = VerticalAlignment.Center,
            VerticalAlignment = VerticalAlignment.Center,
            Background = new SolidColorBrush(Colors.Black),
            HorizontalContentAlignment = HorizontalAlignment.Center,
            HorizontalAlignment = HorizontalAlignment.Center
        };

        dialog.Show();
    }
}

这是链接,如果你想下载它: https://onedrive.live.com/redir?resid=6B27FD720F1FB58D!15988&authkey=!ACG5krcfzsoBxA8&ithint=folder%2csln

有没有人知道什么是错的? 感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

有一个简单的解决方法..将Height添加到ListBox。像这样。

var dialog = new CustomMessageBox()
{
    Content = new ListBox(){ItemsSource = source, Height = 800},
    RightButtonContent = "Cancel",
    LeftButtonContent = "Store",
    VerticalContentAlignment = VerticalAlignment.Top, // Change to Top
    VerticalAlignment = VerticalAlignment.Top, // Change to Top
    Background = new SolidColorBrush(Colors.Black),
    HorizontalContentAlignment = HorizontalAlignment.Center,
    HorizontalAlignment = HorizontalAlignment.Center
};

VerticalContentAlignmentVerticalAlignment更改为“顶部”,因此当您将“高度”值设置为小于800时,内容将与顶部对齐。

答案 1 :(得分:0)

只需要为列表框添加高度:

Content = new ListBox(){ItemsSource = source,Height=800}

答案 2 :(得分:0)

我不建议设置高度,因为Daniel Z提到你将失去自适应设计。我设法做了一个更好的解决方法,它没有将高度设置为静态值,对我来说非常有效。

CustomMessageBox的内容放在UserControl中。假设此控件的xaml内容如下所示

<Grid x:Name="LayoutRoot" Background="{StaticResource PhoneBackgroundBrush}">
        <!-- your listbox and content here -->
</Grid>

在后面的代码中,实现loaded事件:

public UserControl1()
{
    InitializeComponent();
    this.Loaded += UserControl1_Loaded;
}

void UserControl1_Loaded(object sender, RoutedEventArgs e)
{
    LayoutRoot.Height = (this.Parent as CustomMessageBox).ActualHeight;
}

通过设置网格的高度,您的列表框将自动调整其高度以适应。希望它有所帮助。