2011-10-26 6 views
0

저는 vs10을 처음 사용하고 WPF를 사용하여 사용자 정의 일정/캘린더를 만들려고합니다. 지금까지 나는 다소 시각적 인면이있다. 격자 선을 만들기 위해 직사각형과 구분 기호가있는 격자를 사용하고 있습니다. 내가 혼란스러워하는 것은 매달 내가 어떻게 할 수 있는지입니다. 몇 달 사이에 두 개의 화살표 버튼을 전환 할 수 있기를 원하지만 정확한 날짜를 표시하기 위해 내가 할 수있는 일이 확실하지 않습니다. 캘린더의 각 날짜를 표시하기 위해 버튼을 사용하려고 했으므로 사용자가 클릭하면 특정 날짜/날짜에 이벤트/약속을 추가 할 수 있습니다. 어떤 조언이나 조언을 크게 주시면 감사하겠습니다.WPF에서 사용자 정의 일정 만들기

Page x:Class="Camp_.SchedulePage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    mc:Ignorable="d" 
    d:DesignHeight="315" d:DesignWidth="587" 
Title="schedulePage" Background="#FF0A0A0A"> 
<Grid Width="Auto"> 
    <Calendar Height="174" HorizontalAlignment="Left" Margin="190,78,0,0" Name="calendar1" VerticalAlignment="Top" Width="189" /> 
<Grid> 
    <Grid.Background> 
     <RadialGradientBrush> 
      <GradientStop Color="#FFC3D6F5" Offset="0" /> 
      <GradientStop Color="#FFEFF5FF" Offset="1" /> 
     </RadialGradientBrush> 
    </Grid.Background> 
     <Grid HorizontalAlignment="Stretch" Margin="98,60,0,0" Name="grid1" VerticalAlignment="Stretch" Width="Auto" OpacityMask="Black" Opacity="1" Background="#FFC2ECEC" ShowGridLines="False"> 
      <Grid.Resources> <Style x:Key="VerticalSeparatorStyle" 
    TargetType="{x:Type Separator}" 
    BasedOn="{StaticResource {x:Type Separator}}"> 
       <Setter Property="Margin" Value="0,0,0,0"/> 
       <Setter Property="LayoutTransform"> 
        <Setter.Value> 
         <TransformGroup> 
          <TransformGroup.Children> 
           <TransformCollection> 
            <RotateTransform Angle="90"/> 
           </TransformCollection> 
          </TransformGroup.Children> 
         </TransformGroup> 
        </Setter.Value> 
       </Setter> 
       </Style> 
      </Grid.Resources> 
      <Grid.RowDefinitions> 
       <RowDefinition /> 
       <RowDefinition /> 
       <RowDefinition /> 
       <RowDefinition /> 
       <RowDefinition /> 
      </Grid.RowDefinitions> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition /> 
       <ColumnDefinition /> 
       <ColumnDefinition /> 
       <ColumnDefinition /> 
       <ColumnDefinition /> 
       <ColumnDefinition /> 
       <ColumnDefinition /> 
      </Grid.ColumnDefinitions> 
      <Separator Grid.ColumnSpan="7" Height="19" HorizontalAlignment="Stretch" Margin="0" Name="separator4" VerticalAlignment="Stretch" Width="Auto" Grid.Row="3" Grid.RowSpan="2" Background="Aqua" HorizontalContentAlignment="Stretch" Foreground="Aqua" OpacityMask="Aqua" /> 
      <Separator Height="19" HorizontalAlignment="Stretch" Margin="0" Name="separator2" VerticalAlignment="Stretch" Width="Auto" Background="Aqua" Grid.ColumnSpan="7" Grid.Row="1" Grid.RowSpan="2" HorizontalContentAlignment="Stretch" Foreground="Aqua" /> 
      <Separator Height="26" HorizontalAlignment="Stretch" Name="separator1" VerticalAlignment="Stretch" Background="Aqua" Grid.Row="2" Grid.ColumnSpan="7" Margin="0" Grid.RowSpan="2" HorizontalContentAlignment="Stretch" Foreground="Aqua" /> 
      <Separator Height="27" HorizontalAlignment="Stretch" Margin="0" Name="separator3" VerticalAlignment="Stretch" Background="Aqua" Grid.ColumnSpan="7" Grid.RowSpan="2" Width="Auto" HorizontalContentAlignment="Stretch" Foreground="Aqua" /> 

      <Rectangle Height="Auto" HorizontalAlignment="Stretch" Name="rectangle1" Stroke="Aqua" VerticalAlignment="Stretch" Width="Auto" Grid.RowSpan="5" /> 
      <Rectangle Grid.RowSpan="5" Height="Auto" HorizontalAlignment="Stretch" Name="rectangle2" Stroke="Aqua" VerticalAlignment="Stretch" Width="Auto" Grid.Column="1" /> 
      <Rectangle Grid.RowSpan="5" HorizontalAlignment="Stretch" Name="rectangle3" Stroke="Aqua" VerticalAlignment="Stretch" Width="Auto" Grid.Column="2" /> 
      <Rectangle Grid.RowSpan="5" Height="Auto" HorizontalAlignment="Stretch" Name="rectangle4" Stroke="Aqua" Grid.Column="3" /> 
      <Rectangle Grid.RowSpan="5" Height="Auto" HorizontalAlignment="Stretch" Name="rectangle5" Stroke="Aqua" Grid.Column="4" Margin="0" Grid.ColumnSpan="2" /> 
      <Rectangle Grid.RowSpan="5" Height="Auto" HorizontalAlignment="Stretch" Name="rectangle6" Stroke="Aqua" VerticalAlignment="Stretch" Grid.Column="5" /> 
      <Rectangle Grid.RowSpan="5" Height="Auto" HorizontalAlignment="Stretch" Name="rectangle7" Stroke="Aqua" VerticalAlignment="Stretch" Grid.Column="6" /> 
      <Button Content="1" Height="20" HorizontalAlignment="Stretch" Name="button1" VerticalAlignment="Top" Width="Auto" Grid.Column="6" HorizontalContentAlignment="Left" /> 
      <Button Content="2" Height="20" HorizontalAlignment="Stretch" Name="button2" VerticalAlignment="Top" Width="Auto" Grid.Row="1" HorizontalContentAlignment="Left" /> 
     </Grid> 



     <Grid Height="31" HorizontalAlignment="Stretch" Margin="98,31,0,0" Name="grid2" VerticalAlignment="Top" Width="Auto"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition /> 
       <ColumnDefinition /> 
       <ColumnDefinition /> 
       <ColumnDefinition /> 
       <ColumnDefinition /> 
       <ColumnDefinition /> 
       <ColumnDefinition /> 
      </Grid.ColumnDefinitions> 

      <Label Content="Sunday" Height="28" HorizontalAlignment="Stretch" Margin="0,6,0,0" Name="label1" VerticalAlignment="Top" /> 
      <Label Content="Monday" Height="28" HorizontalAlignment="Stretch" Margin="0,6,0,0" Name="label2" VerticalAlignment="Top" Grid.Column="1" /> 
      <Label Content="Tuesday" Height="28" HorizontalAlignment="Stretch" Margin="0,6,0,0" Name="label3" VerticalAlignment="Top" Grid.Column="2" /> 
      <Label Content="Wednesday" Height="28" HorizontalAlignment="Stretch" Margin="0,6,68,0" Name="label4" VerticalAlignment="Top" Grid.Column="3" Grid.ColumnSpan="2" /> 
      <Label Content="Thursday" Height="28" HorizontalAlignment="Stretch" Margin="0,6,2,0" Name="label5" VerticalAlignment="Top" Grid.Column="4" /> 
      <Label Content="Friday" Height="28" HorizontalAlignment="Stretch" Margin="0,6,0,0" Name="label6" VerticalAlignment="Top" Grid.Column="5" /> 
      <Label Content="Saturday" Height="28" HorizontalAlignment="Stretch" Margin="0,6,0,0" Name="label7" VerticalAlignment="Top" Grid.Column="6" /> 
     </Grid> 
     <Button Content="&gt;" Height="23" HorizontalAlignment="Left" Margin="488,6,0,0" Name="button3" VerticalAlignment="Top" Width="29" /> 
     <Button Content="&lt;" Height="23" HorizontalAlignment="Left" Margin="168,8,0,0" Name="button4" VerticalAlignment="Top" Width="29" /> 
    </Grid> 
</Grid> 

답변

1

보통 나는 그 ItemsPanelGrid 6 행으로 설정 ItemsControl, 7 컬럼에 Day 개체 목록을 결합하고, 하나가 속한 것을 WeekWeekDayDay 트랙있을 것입니다 또는 변환기가 나를 위해 그 값을 계산하게하십시오. 그럼 난 그래서 내 Day 객체의 모습 내 ItemsControl.ItemContainerStyle

Grid.RowGrid.Column에 해당 값을 바인딩 할 수 있습니다 :

public class Day : INotifyPropertyChanged 
{ 
    // Of course, these should implement the usual PropertyChange Notifications 
    public int WeekNo {get; set;} 
    public int WeekDay {get; set;} 
    public DateTime Date {get; set;} 
} 

내가 함께 XAML에서 바인딩 될 내 ViewModel에,에 ObservableCollection<Day> Days있을 것입니다 이 :

<ItemsControl ItemsSource="{Binding Days}"> 
    <!-- ItemsPanelTemplate --> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition /> 
        <RowDefinition /> 
        <RowDefinition /> 
        <RowDefinition /> 
        <RowDefinition /> 
        <RowDefinition /> 
       </Grid.RowDefinitions> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition /> 
        <ColumnDefinition /> 
        <ColumnDefinition /> 
        <ColumnDefinition /> 
        <ColumnDefinition /> 
        <ColumnDefinition /> 
       </Grid.ColumnDefinitions> 
      </Grid> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 

    <!-- ItemContainerStyle --> 
    <ItemsControl.ItemContainerStyle> 
     <Style> 
      <Setter Property="Grid.Column" Value="{Binding DayOfWeek}" /> 
      <Setter Property="Grid.Row" Value="{Binding WeekNo}" /> 
     </Style> 
    </ItemsControl.ItemContainerStyle> 
</ItemsControl> 

난 당신이

012 관심이 있다면 ItemsControl에 here를 사용하는 방법에 대한 몇 가지 예를 썼다
+0

그래서 정수 일곱 개 (일요일 -> 토요일)를 만들 수 있지만, 주중 (주간) 또는 내가 변환기를 만드는 방법을 추적 할 수 있다고 말한 방법에 대해 모호합니다. itemspanelTemplate도 무엇입니까? 나는 무지를 유감스럽게 생각하지만, 이것은 특히 나에게 새롭다. :) 입력 btw 주셔서 감사. – TMan

+0

@TMan ItemsControl의 예와 게시 방법에 대한 링크를 참조하십시오. 컬렉션을 통해 반복하고 각 항목을 한 번에 하나씩 화면에 그립니다. 'ItemsPanelTemplate'은 모든 항목을 담는 컨테이너이고,'ItemContainerStyle'은 모든 항목에 적용된 스타일입니다. 또한 ItemTemplate을 사용하여 WPF에게 각 항목을 그리는 방법을 알릴 수 있습니다. – Rachel

+0

귀하의 블로그에서 해당 답변을 본 itemspaneltemplate ..을 긁으십시오. – TMan