escrito por Eugenio Estrada, podeís encontrarlo aquí.
más información y links para descarga aquí.
Ir aquí para descargar los fuentes ( Visual Studio 2010 Beta 2 / .NET 4.0) o los binarios (.NET 4.0)
Sigo con los cambios para la implementación el sistema de elementos del escritorio, intentando integrar WindowContr0l dentro de la jerarquía de elementos de escritorio comentada en el post anterior. Así es como está ahora:
Parte del código de WindowControl se encuentra ahora en DesktopElement, concretamente las partes de “drag”, cambio de tamaño, activación/desactivación, de forma que queden genéricas para cualquier otro control que herede de DesktopElement (las clases DragThumb y ResizeThumb ya no son necesarias).
Hay también un par de cambios para aprovechar las novedades de WPF en .net 4.0, los accesos directos ahora se ejecutan con doble click ( ya se puede usar binding en la propiedad Command de los InputBindings de los controles de WPF ), y lo mismo para el caso del TreeView del navegador de opciones ( ya se hacia aunque de otra forma ).
Hay algunos cambios a nivel visual para tratar de dejar más claro cual es el elemento activo en el escritorio, tanto los widgets como las ventanas cambiarán su opacidad dependiendo de si están activos o no.
Y como siempre un pantallazo
Novedades en chronos …
Me he instalado el la beta 2 del Visual Studio 2010 y he migrado los fuentes de Chronos a la nueva versión, así aprovecho y voy viendo algunas de las novedades tanto del Visual Studio como del .NET Framework 4 en vivo y en directo.
Los cambios que estoy haciendo ahora mismo son para la implementacíón de los elementos que se pueden mostrar en el en la ventana principal (que ejerce de escritorio), widgets (por el momento sólo hay dos el navegador de opciones y la lista de widgets disponibles) y shortcuts (por el momento las ventas van un poco por libre.
Ahora hay una clase base para los elementos que se puedan visualizar en el escritorio (DesktopElement), y dos clases que descienden de esta para los shortcuts (ShortcutElement) y widgets(WidgetElement), la visualización se hace con DataTemplates intentando hacer uso del patrón Model-View-ViewModel.
Ahora queda un poco más sencillo y más claro que antes que estaba el tema un poco lioso.
Además he aprovechado para mover el código relativo a Drag & Drop a un proyecto propio, y cambiado la implementación de los shortcuts para adaptarla al sistema nuevo.
Ahí algunos cambios más de reorganización del código y de limpieza de algunas cosillas que ya no hacían falta, espero subirlos al repositorio de codeplex lo antes posible
Ahí va un pantallazo de como se ve ahora.
Chronos: Últimos cambios
… que aún no están subidos en codeplex, pero bueno, …
- Uso del control Search TextBox de David Owens, con algunos cambios en los estilos y posiblemente acabe haciendo algún cambio también en la forma en la que funciona.
- Uso del control SplitButton de alrh.
- Cambios en la forma de manejar el Drop en el Canvas, utilizando el código de ejemplo de Jaime Rodriguez, con cambios para adaptarlo a lo que necesito en Chronos.
- Cambios en los estilos de la ventana principal, los botones, …
Los links a los artículos de Drag & Drop de Jaime Rodriguez
- Drag & Drop in WPF … Explained end to end …
- Drag & drop in WPF part2 …
- Drag & Drop in WPF.. part 3 .. the results and code…
Y ahi van dos pantallazo de como se ve ahora
Chinch es unframework para el desarrollo de aplicaciones utilizando Model-View-ViewModel, por lo que he visto en los artículos de codeproject del autor tiene muy buena pinta, más información aqui
Los artículos de codeproject:
http://www.codeproject.com/KB/WPF/Cinch.aspx
http://www.codeproject.com/KB/WPF/CinchII.aspx
http://www.codeproject.com/KB/WPF/CinchIII.aspx
http://www.codeproject.com/KB/WPF/CinchIV.aspx
Chronos: Cambiando de estilo
Llevo un par de dias buscando por internet iconos y fondos vectoriales para cambiar un el estilo de Chronos ( y intentar mejorarlo un poco ), en general lo que se encuentra suele estar en formatos SVG o AI y se puede usar Inkscape para convertirlos a XAML (aunque no siempre funciona, y normalmente harán falta ajustes manuales, pero en general cumple)
En GoSquared se puede encontrar una buena colección de iconos (algunos de los cuales se pueden ver en la imagen que hay al final de esta entrada) y en DragonArtz he encontrado un fondo que me convence ![]()
Y aquí va un pantallazo de como se ve ahora:
Chronos: Zoom en las ventanas
Sigo haciendo cambios en Chronos (aunque van a tardar un tiempo en ver la luz en Codeplex), he estado viendo como hacer un Zoom sobre el contenido de las ventanas, algo realmente sencillo en WPF.
Por un lado tengo un Popup, con un Slider con el que poder modificar el Zoom a aplicar, un TextBlock para mostrar el porcentaje y un botón para cerrar el Popup (que lo cierra usando un StoryBoard que establece la propiedad IsOpen del Popup a false, para mostrar el popup se hace lo mismo en otro botón pero que establece la propiedad IsOpen a true):
1: <Popup x:Name="ZoomView"
2: AllowsTransparency="True"
3: IsOpen="False"
4: Width="300"
5: Height="100"
6: StaysOpen="True"
7: PlacementTarget="{Binding ElementName=WindowFrame}"
8: Placement="Center" >
9:
10: <Border Margin="5,5,5,5" CornerRadius="3,3,3,3">
11: <Border.Background>
12: <LinearGradientBrush EndPoint="0.465,-0.246" StartPoint="0.465,1.116">
13: <GradientStop Color="#35000000" Offset="0"/>
14: <GradientStop Color="#FF5A5C62" Offset="1"/>
15: <GradientStop Color="#CE262626" Offset="0.572"/>
16: </LinearGradientBrush>
17: </Border.Background>
18: <Border.Effect>
19: <DropShadowEffect BlurRadius="10" ShadowDepth="0" Opacity="0.695" Direction="2" PresentationOptions:Freeze="True" />
20: </Border.Effect>
21: <Grid Margin="10,0,10,0">
22: <Grid.RowDefinitions>
23: <RowDefinition Height="15" />
24: <RowDefinition Height="55" />
25: <RowDefinition Height="10" />
26: </Grid.RowDefinitions>
27: <Button Grid.Row="0"
28: HorizontalAlignment="Right"
29: Style="{StaticResource TransparentCloseButtonStyle}">
30: <Button.Triggers>
31: <EventTrigger RoutedEvent="ButtonBase.Click">
32: <BeginStoryboard>
33: <Storyboard>
34: <BooleanAnimationUsingKeyFrames Storyboard.TargetName="ZoomView"
35: Storyboard.TargetProperty="IsOpen"
36: Duration="0:0:0">
37: <DiscreteBooleanKeyFrame Value="False" KeyTime="0:0:0" />
38: </BooleanAnimationUsingKeyFrames>
39: </Storyboard>
40: </BeginStoryboard>
41: </EventTrigger>
42: </Button.Triggers>
43: </Button>
44: <Slider x:Name="ZoomSlider"
45: Grid.Row="1"
46: IsTabStop="False"
47: Maximum="250"
48: Minimum="50"
49: LargeChange="10"
50: SmallChange="5"
51: TickPlacement="BottomRight"
52: Value="100"
53: VerticalAlignment="Center"
54: HorizontalAlignment="Stretch"
55: Interval="5"
56: TickFrequency="5"
57: IsSnapToTickEnabled="True">
58: </Slider>
59: <TextBlock Grid.Row="2"
60: Foreground="White"
61: FontWeight="Bold"
62: Text="{Binding ElementName=ZoomSlider, Path=Value, StringFormat={}{0}%}"
63: HorizontalAlignment="Center"
64: VerticalAlignment="Center" />
65: </Grid>
66: </Border>
67: </Popup>
Y por otro un LayoutTransform aplicado sobre el ContentPresenter (está todo definido en un estilo personalizado para la ventana)
1: <ContentPresenter RenderTransformOrigin="0.5, 0.5">
2: <ContentPresenter.LayoutTransform>
3: <ScaleTransform CenterX="0"
4: CenterY="0"
5: ScaleX="{Binding ElementName=ZoomSlider, Path=Value, Converter={StaticResource ZoomTransformConverter}}"
6: ScaleY="{Binding ElementName=ZoomSlider, Path=Value, Converter={StaticResource ZoomTransformConverter}}"
7: />
8: </ContentPresenter.LayoutTransform>
9: </ContentPresenter>
Y así es como queda … ![]()
Hay un bug en el Visual Studio 2008 SP 1 que hace que el IDE se quede colgado al trabajar con aplicaciones en WPF, la descripción del problema se puede encontrar en la Knowledge Base de Microsoft y el hotfix en el Code Gallery ( en donde avisan de que el hotfix no ha sido testeado al 100% … sic )