Am I going about this the right way?
Posted
by Psytronic
on Stack Overflow
See other posts from Stack Overflow
or by Psytronic
Published on 2010-03-12T10:20:15Z
Indexed on
2010/03/12
10:27 UTC
Read the original article
Hit count: 653
Hey Guys,
I'm starting a WPF project, and just finished the base of the UI, it seems very convoluted though, so I'm not sure if I've gone around laying it out in the right way. I don't want to get to start developing the back-end and realise that I've done the front wrong, and make life harder for myself.
Coming from a background of <DIV>'s and CSS to style this is a lot different, and really want to get it right from the start.
Essentially it's a one week calendar (7 days, Mon-Sunday, defaulting to the current week.) Which will eventually link up to a DB and if I have an appointment for something on this day it will show it in the relevant day.
I've opted for a Grid rather than ListView because of the way it will work I will not be binding the results to a collection or anything along those lines. Rather I will be filling out a Combo box within the canvas for each day (yet to be placed in the code) for each event and on selection it will show me further details.
XAML:
<Window x:Class="WOW_Widget.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:Extensions="clr-namespace:WOW_Widget" DataContext="{Binding RelativeSource={RelativeSource Self}}" Title="Window1" Height="239" Width="831"> <Window.Resources> <LinearGradientBrush x:Key="NormalBrush" StartPoint="0,0" EndPoint="0,1"> <GradientBrush.GradientStops> <GradientStopCollection> <GradientStop Offset="1.0" Color="White"/> <GradientStop Offset="0.0" Color="LightSlateGray"/> </GradientStopCollection> </GradientBrush.GradientStops> </LinearGradientBrush> <LinearGradientBrush x:Key="grdDayHeader" StartPoint="0,0" EndPoint="0,1"> <GradientBrush.GradientStops> <GradientStopCollection> <GradientStop Offset="0.0" Color="Peru" /> <GradientStop Offset="1.0" Color="White" /> </GradientStopCollection> </GradientBrush.GradientStops> </LinearGradientBrush> <LinearGradientBrush x:Key="grdToday" StartPoint="0,0" EndPoint="0,1"> <GradientBrush.GradientStops> <GradientStopCollection> <GradientStop Offset="0.0" Color="LimeGreen"/> <GradientStop Offset="1.0" Color="DarkGreen" /> </GradientStopCollection> </GradientBrush.GradientStops> </LinearGradientBrush> <Style TargetType="{x:Type GridViewColumnHeader}"> <Setter Property="Background" Value="Khaki" /> </Style> <Style x:Key="DayHeader" TargetType="{x:Type Label}"> <Setter Property="Background" Value="{StaticResource grdDayHeader}" /> <Setter Property="Width" Value="111" /> <Setter Property="Height" Value="25" /> <Setter Property="HorizontalContentAlignment" Value="Center" /> </Style> <Style x:Key="DayField"> <Setter Property="Canvas.Width" Value="111" /> <Setter Property="Canvas.Height" Value="60" /> <Setter Property="Canvas.Background" Value="White" /> </Style> <Style x:Key="Today"> <Setter Property="Canvas.Background" Value="{StaticResource grdToday}" /> </Style> <Style x:Key="CalendarColSpacer"> <Setter Property="Canvas.Width" Value="1" /> <Setter Property="Canvas.Background" Value="Black" /> </Style> <Style x:Key="CalendarRowSpacer"> <Setter Property="Canvas.Height" Value="1" /> <Setter Property="Canvas.Background" Value="Black" /> </Style> </Window.Resources> <Grid Background="{StaticResource NormalBrush}"> <Border BorderBrush="Black" BorderThickness="1" Width="785" Height="86" Margin="12,12,12,104"> <Canvas Height="86" Width="785" VerticalAlignment="Top"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition /> <ColumnDefinition /> <ColumnDefinition /> <ColumnDefinition /> <ColumnDefinition /> <ColumnDefinition /> <ColumnDefinition /> <ColumnDefinition /> <ColumnDefinition /> <ColumnDefinition /> <ColumnDefinition /> <ColumnDefinition /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Label Grid.Column="0" Grid.Row="0" Content="Monday" Style="{StaticResource DayHeader}" /> <Canvas Grid.Column="1" Grid.RowSpan="3" Grid.Row="0" Style="{StaticResource CalendarColSpacer}" /> <Label Grid.Column="2" Grid.Row="0" Content="Tuesday" Style="{StaticResource DayHeader}" /> <Canvas Grid.Column="3" Grid.RowSpan="3" Grid.Row="0" Style="{StaticResource CalendarColSpacer}" /> <Label Grid.Column="4" Grid.Row="0" Content="Wednesday" Style="{StaticResource DayHeader}" /> <Canvas Grid.Column="5" Grid.RowSpan="3" Grid.Row="0" Style="{StaticResource CalendarColSpacer}" /> <Label Grid.Column="6" Grid.Row="0" Content="Thursday" Style="{StaticResource DayHeader}" /> <Canvas Grid.Column="7" Grid.RowSpan="3" Grid.Row="0" Style="{StaticResource CalendarColSpacer}" /> <Label Grid.Column="8" Grid.Row="0" Content="Friday" Style="{StaticResource DayHeader}" /> <Canvas Grid.Column="9" Grid.RowSpan="3" Grid.Row="0" Style="{StaticResource CalendarColSpacer}" /> <Label Grid.Column="10" Grid.Row="0" Content="Saturday" Style="{StaticResource DayHeader}" /> <Canvas Grid.Column="11" Grid.RowSpan="3" Grid.Row="0" Style="{StaticResource CalendarColSpacer}" /> <Label Grid.Column="12" Grid.Row="0" Content="Sunday" Style="{StaticResource DayHeader}" /> <Canvas Grid.Column="0" Grid.ColumnSpan="13" Grid.Row="1" Style="{StaticResource CalendarRowSpacer}" /> <Canvas Grid.Column="0" Grid.Row="2" Margin="0" Style="{StaticResource DayField}"> <Label Name="lblMondayDate" /> </Canvas> <Canvas Grid.Column="2" Grid.Row="2" Margin="0" Style="{StaticResource DayField}"> <Label Name="lblTuesdayDate" /> </Canvas> <Canvas Grid.Column="4" Grid.Row="2" Margin="0" Style="{StaticResource DayField}"> <Label Name="lblWednesdayDate" /> </Canvas> <Canvas Grid.Column="6" Grid.Row="2" Margin="0" Style="{StaticResource DayField}"> <Label Name="lblThursdayDate" /> </Canvas> <Canvas Grid.Column="8" Grid.Row="2" Margin="0" Style="{StaticResource DayField}"> <Label Name="lblFridayDate" /> </Canvas> <Canvas Grid.Column="10" Grid.Row="2" Margin="0" Style="{StaticResource DayField}"> <Label Name="lblSaturdayDate" /> </Canvas> <Canvas Grid.Column="12" Grid.Row="2" Margin="0" Style="{StaticResource DayField}"> <Label Name="lblSundayDate" /> </Canvas> </Grid> </Canvas> </Border> <Canvas Height="86" HorizontalAlignment="Right" Margin="0,0,12,12" Name="canvas1" VerticalAlignment="Bottom" Width="198"></Canvas> </Grid> </Window>
CS:
public partial class Window1 : Window { private DateTime today = new DateTime(); private Label[] Dates = new Label[7]; public Window1() { DateTime start = today = DateTime.Now; int day = (int)today.DayOfWeek; while (day != 1) { start = start.Subtract(new TimeSpan(1, 0, 0, 0)); day--; } InitializeComponent(); Dates[0] = lblMondayDate; Dates[1] = lblTuesdayDate; Dates[2] = lblWednesdayDate; Dates[3] = lblThursdayDate; Dates[4] = lblFridayDate; Dates[5] = lblSaturdayDate; Dates[6] = lblSundayDate; FillWeek(start); } private void FillWeek(DateTime start) { for (int d = 0; d < Dates.Length; d++) { TimeSpan td = new TimeSpan(d, 0, 0, 0); DateTime _day = start.Add(td); if (_day.Date == today.Date) { Canvas dayCanvas = (Canvas)Dates[d].Parent; dayCanvas.Style = (Style)this.Resources["Today"]; } Dates[d].Content = (int)start.Add(td).Day; } } }
Thanks for any tips you guys can give
Psytronic
© Stack Overflow or respective owner