Os mantendré informados.
Un montón de licencias que asignar, un monton de software que probar...
Si lees algo en este blog que no sabías eres, oficialmente, el último en enterarte.
<Grid x:Name="LayoutRoot"> <Border VerticalAlignment="Top" BorderBrush="#FF929EB0" BorderThickness="1" CornerRadius="2" Background="#FFE9E9E9" Margin="5,2"> <Grid d:LayoutOverrides="Width"> <Grid.RowDefinitions> <RowDefinition Height="Auto" MinHeight="20"/> <RowDefinition Height="Auto" MinHeight="5"/> </Grid.RowDefinitions> <TextBlock x:Name="Header" TextWrapping="Wrap" d:LayoutOverrides="Width" Foreground="#FF656565" Margin="15,2,0,0" VerticalAlignment="Top"/> <StackPanel x:Name="ChildrenPanel" VerticalAlignment="Top" d:LayoutOverrides="Width" Margin="0,2,0,0" Grid.Row="1"/> </Grid> </Border> </Grid>El truco está en añadir un TextBlock en la cabecera del expander y suscribirse al evento MouseLeftButtonUp del TextBlock para controlar el plegado y desplegado. También he añadido una propiedad Folded para manejar el estado del expander desde afuera.
public partial class Expander : UserControl { bool _Folded; public bool Folded { get { return _Folded; } set { _Folded = !value; ExpanderSwitch(); } } ListY para usarlo solo tienes que añadir el control:ChildrenList; public Expander() { // Required to initialize variables InitializeComponent(); ChildrenList = new List (); Header.MouseLeftButtonUp += new System.Windows.Input.MouseButtonEventHandler(UserActivity_MouseLeftButtonUp); } void UserActivity_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e) { ExpanderSwitch(); } private void ExpanderSwitch() { if (Folded) { foreach (var child in ChildrenList) ChildrenPanel.Children.Add(child); } else { if (ChildrenList.Count == 0) foreach (var item in ChildrenPanel.Children) ChildrenList.Add(item); while (ChildrenPanel.Children.Count > 0) ChildrenPanel.Children.RemoveAt(0); } _Folded = !_Folded; } }
<Grid x:Name="LayoutRoot"> <this:Expander x:Name="UserNews" /> </Grid>Y en el code behind puedes hacer algo como esto:
UserNews.Header.Text = GetHeader(News[0]); foreach (FrameworkNews news in News) UserNews.ChildrenPanel.Children.Add(new NewsDetail(news.Link, GetDetail(news), news.Where)); UserNews.Folded = true;Si tienes tiempo puedes añadir imágenes y animaciones al expander, y también un mejor "control del despliegue"... Yo no puedo dedicarle más tiempo, aunque me encantaría.... Una pena.
No hay comentarios:
Publicar un comentario