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();
}
}
List 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;
}
} Y para usarlo solo tienes que añadir el control:<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