单击C#XAML列表框崩溃

时间:2014-09-26 17:15:46

标签: c# xaml user-interface windows-phone-8.1 listboxitem

我是XAML for Windows Phone 8.1的新手,并且遇到了一些麻烦

  1. 使Stackpanel可点击
  2. 点击
  3. 折叠项目
  4. 到目前为止我的工作看起来像这样: enter image description here

    代码(请纠正我,如果有重大缺陷):

    <Border CornerRadius="15" Background="#FF595656" Margin="0" Grid.ColumnSpan="2" Height="80">
            <StackPanel Orientation="Horizontal">
                <StackPanel Width="20" HorizontalAlignment="Left" VerticalAlignment="Top" />
                <StackPanel HorizontalAlignment="Left" Height="80" Margin="0,0,0,0" VerticalAlignment="Center" Width="51">
                    <Image HorizontalAlignment="Left" Height="51" Margin="0,15,0,0" Width="51" Source="Assets/fish.png" Stretch="Fill" RenderTransformOrigin="2.307,0.881" VerticalAlignment="Center"/>
                </StackPanel>
                <StackPanel Width="10" HorizontalAlignment="Left" VerticalAlignment="Top" />
                <StackPanel HorizontalAlignment="Left" Height="80" Margin="0" VerticalAlignment="Top" Width="310">
                    <TextBlock HorizontalAlignment="Left" Height="25" Margin="0,20,0,0" TextWrapping="Wrap" Text="Entry 1" Width="310" VerticalAlignment="Top" FontSize="18" Foreground="Black" FontWeight="Bold"/>
                    <TextBlock HorizontalAlignment="Left" Height="17" Margin="0" TextWrapping="Wrap" Text="Short description Entry 1" Width="310" VerticalAlignment="Top" Foreground="#FF0097FF"/>
                </StackPanel>
            </StackPanel>
        </Border>
    

    此代码稍后将被包含在ListBox内,其中包含Image,Entry 1和绑定的简短描述:

    <ListBox x:Name="ListBox1" Margin="0"
         Width="400" Height="200" HorizontalAlignment="Left"
         ItemsSource="{Binding}" Grid.Row="1" VerticalAlignment="Top" Grid.ColumnSpan="2" >
            <ListBox.ItemTemplate>
                <DataTemplate>
    
                    // the code above
    
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    

    所以我的问题是: 每当我点击它时,如何在Item中对每个ListBox进行漂亮的展开/折叠?

    非常感谢你。

1 个答案:

答案 0 :(得分:5)

真正的问题是,你想让它崩溃到什么地方?折叠某些可视数据项的方法太多了。你只是想改变项目的高度,还是想要一些折叠某些属性的奇特动画?

如果您正在寻找它的高度非常简单。只需在您的边框上附加Tap Event即可。在旁注中,您可能希望将ItemContainerStyle编辑为<Setter Property="HorizontalContentAlignment" Value="Stretch"/>,以便列表框在屏幕上延伸,否则无法使用。


<ListBox.ItemTemplate>
    <DataTemplate>
        <Border BorderBrush="Red" BorderThickness="0,1" Tap="Border_Tap">
            <StackPanel>
                <!--- rest of template --->
            </StackPanel>
        </Border>
    </DataTemplate>
</ListBox.ItemTemplate>

然后计算你想要显示的最小高度(确保它实际上是可用的,这意味着......我可以再次点击它来显示整个事物而不使用Mag Glass)。

private void Border_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
    int minHeight = 40;                // change to whatever you want
    Border b = sender as Border;
    if (b.ActualHeight > minHeight)
    {
        b.Height = minHeight;
    }
    else
    {
        b.Height = double.NaN;         // this will change the height back to Auto, showing everything
    }
}

代码在行动

enter image description here
enter image description here


这只是您问题的快速解决方案。这里的一些人宁愿让您在StoryBoard中的Selected州的高度属性上创建VisualStateManager动画。如果您重新编写或创建一个明确说明您需要VisualStateManager解决方案的新问题,我也会为您提供一个解决方案。祝你好运。