2013-10-10 18 views
2

我提前道歉,如果這是已經在那裏(我做了一個先進的搜索,但沒有找到這個具體問題。)不工作(使用修改的模板)WPF日期選擇日曆按鈕

我使用一個自定義WPF Datepicker日曆模板(只需更改顏色),但現在我的按鈕不起作用。它會彈出日曆,但從這一點來說沒有任何作用,我錯過了什麼?這裏的代碼如下:

<ResourceDictionary 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:Controls="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit" 
xmlns:primitives="clr-namespace:Microsoft.Windows.Controls.Primitives;assembly=WPFToolkit" > 
<Style x:Key="CalendarStyle1" TargetType="{x:Type Calendar}"> 
    <Setter Property="Foreground" Value="#FF333333"/> 
    <Setter Property="Background"> 
     <Setter.Value> 
      <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
       <GradientStop Color="#FFE4EAF0" Offset="0"/> 
       <GradientStop Color="#FFECF0F4" Offset="0.16"/> 
       <GradientStop Color="#FFFCFCFD" Offset="0.16"/> 
       <GradientStop Color="White" Offset="1"/> 
      </LinearGradientBrush> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="BorderBrush"> 
     <Setter.Value> 
      <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
       <GradientStop Color="#FFA3AEB9" Offset="0"/> 
       <GradientStop Color="#FF8399A9" Offset="0.375"/> 
       <GradientStop Color="#FF718597" Offset="0.375"/> 
       <GradientStop Color="#FF617584" Offset="1"/> 
      </LinearGradientBrush> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="BorderThickness" Value="1"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Calendar}"> 
       <StackPanel x:Name="PART_Root" HorizontalAlignment="Center"> 
        <primitives:CalendarItem x:Name="PART_CalendarItem" Style="{DynamicResource CalenderStyleNew}" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"/> 
       </StackPanel> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

<Style x:Key="CalenderStyleNew" 
      TargetType="primitives:CalendarItem"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="primitives:CalendarItem"> 
       <ControlTemplate.Resources> 
        <!-- Start: Data template for header button --> 
        <DataTemplate x:Key="DayTitleTemplate"> 
         <TextBlock 
              FontWeight="Bold" 
              FontFamily="Verdana" 
              FontSize="9.5" 
              Foreground="Black" 
              HorizontalAlignment="Center" 
              Text="{Binding}" 
              Margin="0,6,0,6" 
              VerticalAlignment="Center"/> 
        </DataTemplate> 
        <!-- End: Data template for header button --> 
        <DataTemplate x:Key="MonthTitleTemplate"> 
         <TextBlock 
              FontWeight="Medium" 
              FontFamily="Verdana" 
              FontSize="9.5" 
              Foreground="Red" 
              HorizontalAlignment="Center" 
              Text="{Binding}" 
              Margin="0,10,0,6" 
              VerticalAlignment="Center"/> 
        </DataTemplate> 
       </ControlTemplate.Resources> 

       <Grid Name="PART_Root" > 
        <Grid.Resources> 
         <SolidColorBrush x:Key="DisabledColor" Color="#A5FFFFFF" /> 
        </Grid.Resources> 
        <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup x:Name="CommonStates"> 
          <VisualState x:Name="Normal" /> 
          <VisualState x:Name="Disabled"> 
           <Storyboard> 
            <DoubleAnimation Storyboard.TargetName="PART_DisabledVisual" Storyboard.TargetProperty="Opacity" To="1" Duration="0" /> 
           </Storyboard> 
          </VisualState> 
         </VisualStateGroup> 
        </VisualStateManager.VisualStateGroups> 

        <Border 
          BorderBrush="{TemplateBinding BorderBrush}" 
          BorderThickness="{TemplateBinding BorderThickness}" 
          CornerRadius="1"> 

         <!-- This Brush is new --> 
         <Border.Background> 
          <LinearGradientBrush StartPoint="0 0" EndPoint="0 1"> 
           <GradientStop Offset="0" Color="#FFE4EAF0" /> 
           <GradientStop Offset="0.5" Color="#FFECF0F4" /> 
           <GradientStop Offset="1" Color="#FFECF0F4" /> 
          </LinearGradientBrush> 
         </Border.Background> 

         <Border CornerRadius="1" BorderBrush="#FFFFFFFF" BorderThickness="2"> 
          <Grid> 
           <Grid.RowDefinitions> 
            <RowDefinition Height="Auto"/> 
            <RowDefinition Height="*"/> 
           </Grid.RowDefinitions> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="Auto"/> 
            <ColumnDefinition Width="Auto"/> 
            <ColumnDefinition Width="Auto"/> 
           </Grid.ColumnDefinitions> 

           <Grid.Resources> 
            <!-- Start: Previous button template --> 
            <ControlTemplate x:Key="PreviousButtonTemplate" TargetType="{ x:Type Button}"> 
             <Grid Cursor="Hand"> 
              <VisualStateManager.VisualStateGroups> 
               <VisualStateGroup x:Name="CommonStates"> 
                <VisualState x:Name="Normal" /> 
                <VisualState x:Name="MouseOver"> 
                 <Storyboard> 
                  <ColorAnimation Storyboard.TargetName="TextColor" Storyboard.TargetProperty="Color" To="#FF73A9D8" Duration="0" /> 
                 </Storyboard> 
                </VisualState> 
                <VisualState x:Name="Disabled"> 
                 <Storyboard> 
                  <DoubleAnimation Storyboard.TargetName="TextColor" Storyboard.TargetProperty="Opacity" To=".5" Duration="0" /> 
                 </Storyboard> 
                </VisualState> 
               </VisualStateGroup> 
              </VisualStateManager.VisualStateGroups> 
              <Rectangle Fill="#11E5EBF1" Stretch="Fill" Opacity="1"/> 
              <Grid> 
               <Path Margin="14,-6,0,0" Height="10" Width="6" VerticalAlignment="Center" HorizontalAlignment="Left" Stretch="Fill" Data="M288.75,232.25 L288.75,240.625 L283,236.625 z"> 
                <Path.Fill> 
                 <SolidColorBrush x:Name="TextColor" Color="#FF333333" /> 
                </Path.Fill> 
               </Path> 
              </Grid> 
             </Grid> 
            </ControlTemplate> 
            <ControlTemplate x:Key="NextButtonTemplate" TargetType="{ x:Type Button}"> 
             <Grid Cursor="Hand"> 
              <VisualStateManager.VisualStateGroups> 
               <VisualStateGroup x:Name="CommonStates"> 
                <VisualState x:Name="Normal" /> 
                <VisualState x:Name="MouseOver"> 
                 <Storyboard> 
                  <ColorAnimation Storyboard.TargetName="TextColor" Storyboard.TargetProperty="Color" To="#FF73A9D8" Duration="0" /> 
                 </Storyboard> 
                </VisualState> 
                <VisualState x:Name="Disabled"> 
                 <Storyboard> 
                  <DoubleAnimation Storyboard.TargetName="TextColor" Storyboard.TargetProperty="Opacity" To=".5" Duration="0" /> 
                 </Storyboard> 
                </VisualState> 
               </VisualStateGroup> 
              </VisualStateManager.VisualStateGroups> 
              <Rectangle Fill="#11E5EBF1" Stretch="Fill" Opacity="1"/> 
              <Grid> 
               <Path Margin="0,-6,14,0" Height="10" Width="6" VerticalAlignment="Center" HorizontalAlignment="Right" Stretch="Fill" Data="M282.875,231.875 L282.875,240.375 L288.625,236 z"> 
                <Path.Fill> 
                 <SolidColorBrush x:Name="TextColor" Color="#FF333333" /> 
                </Path.Fill> 
               </Path> 
              </Grid> 
             </Grid> 
            </ControlTemplate> 

            <!-- End: Next button template --> 

            <!-- Start: Header button template --> 
            <ControlTemplate x:Key="HeaderButtonTemplate" TargetType="{ x:Type Button}"> 
             <Grid Cursor="Hand"> 
              <VisualStateManager.VisualStateGroups> 
               <VisualStateGroup x:Name="CommonStates"> 
                <VisualState x:Name="Normal" /> 
                <VisualState x:Name="MouseOver"> 
                 <Storyboard> 
                  <ColorAnimation Storyboard.TargetName="TextColor" Storyboard.TargetProperty="Color" To="Blue" Duration="0" /> 
                 </Storyboard> 
                </VisualState> 
                <VisualState x:Name="Disabled"> 
                 <Storyboard> 
                  <DoubleAnimation Storyboard.TargetName="buttonContent" Storyboard.TargetProperty="Opacity" To=".5" Duration="0" /> 
                 </Storyboard> 
                </VisualState> 
               </VisualStateGroup> 
              </VisualStateManager.VisualStateGroups> 

              <!-- This Border is new --> 
              <Border Padding="12 0" 
                 CornerRadius="6"> 
               <Border.Background> 
                <LinearGradientBrush StartPoint="0 0" EndPoint="0 1"> 
                 <GradientStop Offset="0" Color="#FF73A9D8" /> 
                 <GradientStop Offset="1" Color="#FF73A9E8" /> 
                </LinearGradientBrush> 
               </Border.Background> 

               <ContentPresenter 
                x:Name="buttonContent" 
                Content="{TemplateBinding Content}" 
                ContentTemplate="{TemplateBinding ContentTemplate}" 
                Margin="1,4,1,9" 
                HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                VerticalAlignment="{TemplateBinding VerticalContentAlignment}"> 
                <TextElement.Foreground> 
                 <SolidColorBrush x:Name="TextColor" Color="#FF333333"/> 
                </TextElement.Foreground> 
               </ContentPresenter> 
              </Border> 
             </Grid> 
            </ControlTemplate> 
            <!-- End: Header button template --> 

           </Grid.Resources> 

           <!-- Start: Previous button content --> 
           <Button x:Name="PART_PreviousButton" 
             Grid.Row="0" Grid.Column="0" 
             Template="{StaticResource PreviousButtonTemplate}" 
             Height="20" Width="28" 
             HorizontalAlignment="Left" 
             Focusable="False" 
             /> 
           <!-- End: Previous button content --> 

           <!-- Start: Header button content --> 
           <Button x:Name="PART_HeaderButton"            
             Grid.Row="0" Grid.Column="1" 
             Template="{StaticResource HeaderButtonTemplate}" 
             HorizontalAlignment="Center" VerticalAlignment="Center" 
             Height="28" Width="110" 
             FontWeight="Bold" FontSize="10.5" 
             Focusable="False" 
             /> 
           <!-- End: Header button content --> 

           <!-- Start: Next button content --> 
           <Button x:Name="PART_NextButton" 
             Grid.Row="0" Grid.Column="2" 
             Height="20" Width="28" 
             HorizontalAlignment="Right" 
             Template="{StaticResource NextButtonTemplate}" 
             Focusable="False" 
             /> 
           <!-- End: Next button content --> 

           <!-- Start: Month Content Grid --> 
           <Grid x:Name="PART_MonthView" Grid.Row="1" Grid.ColumnSpan="3" Visibility="Visible" Margin="6,-1,6,6"> 
            <Grid.RowDefinitions> 
             <RowDefinition Height="Auto"/> 
             <RowDefinition Height="Auto"/> 
             <RowDefinition Height="Auto"/> 
             <RowDefinition Height="Auto"/> 
             <RowDefinition Height="Auto"/> 
             <RowDefinition Height="Auto"/> 
             <RowDefinition Height="Auto"/> 
            </Grid.RowDefinitions> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition Width="Auto"/> 
             <ColumnDefinition Width="Auto"/> 
             <ColumnDefinition Width="Auto"/> 
             <ColumnDefinition Width="Auto"/> 
             <ColumnDefinition Width="Auto"/> 
             <ColumnDefinition Width="Auto"/> 
             <ColumnDefinition Width="Auto"/> 
            </Grid.ColumnDefinitions> 
           </Grid> 
           <!-- End: Month Content Grid --> 

           <!-- End: Year Content Grid --> 
           <Grid x:Name="PART_YearView" Grid.Row="1" Grid.ColumnSpan="3" Visibility="Hidden" Margin="6,-3,7,6"> 
            <Grid.RowDefinitions> 
             <RowDefinition Height="Auto"/> 
             <RowDefinition Height="Auto"/> 
             <RowDefinition Height="Auto"/> 
            </Grid.RowDefinitions> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition Width="Auto"/> 
             <ColumnDefinition Width="Auto"/> 
             <ColumnDefinition Width="Auto"/> 
             <ColumnDefinition Width="Auto"/> 
            </Grid.ColumnDefinitions> 
           </Grid> 
           <!-- End: Year Content Grid --> 
          </Grid> 
         </Border> 
        </Border> 
        <Rectangle x:Name="PART_DisabledVisual" Opacity="0" Visibility="Collapsed" Stretch="Fill" StrokeThickness="1" RadiusX="2" RadiusY="2" Stroke="{StaticResource DisabledColor}" Fill="{StaticResource DisabledColor}"/> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsEnabled" Value="False"> 
         <Setter TargetName="PART_DisabledVisual" Property="Visibility" Value="Visible" /> 
        </Trigger> 
        <DataTrigger Value="Year"> 
         <DataTrigger.Binding> 
          <Binding Path="DisplayMode"> 
           <Binding.RelativeSource> 
            <RelativeSource Mode="FindAncestor" AncestorType="{x:Type Controls:Calendar}" /> 
           </Binding.RelativeSource> 
          </Binding> 
         </DataTrigger.Binding> 
         <Setter TargetName="PART_MonthView" Property="Visibility" Value="Hidden" /> 
         <Setter TargetName="PART_YearView" Property="Visibility" Value="Visible" /> 
        </DataTrigger> 
        <DataTrigger Value="Decade"> 
         <DataTrigger.Binding> 
          <Binding Path="DisplayMode"> 
           <Binding.RelativeSource> 
            <RelativeSource Mode="FindAncestor" AncestorType="{x:Type Controls:Calendar}" /> 
           </Binding.RelativeSource> 
          </Binding> 
         </DataTrigger.Binding> 
         <Setter TargetName="PART_MonthView" Property="Visibility" Value="Hidden" /> 
         <Setter TargetName="PART_YearView" Property="Visibility" Value="Visible" /> 
        </DataTrigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

注:我有設置在應用程序級別此資源字典,我約束力的全球性的calendarstyle屬性所有datepickers。

這是一個應用程序級別的資源字典:

<Style TargetType="{x:Type DatePicker}"> 
    <Setter 
     Property="CalendarStyle" 
     Value="{StaticResource CalendarStyle1}" /> 
</Style> 

而且這是在資源字典中引用(如果我沒有錯,我是新來的XAML

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary 
       Source="ResourceDictionary/CustomCalendar.xaml" /> 
      <ResourceDictionary 
       Source="ResourceDictionary/GlobalStyles.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

回答

1

您的問題與您的風格TargetTypes有關如果您發現您的日曆風格定義爲:

<Style x:Key="CalendarStyle1" TargetType="{x:Type Calendar}"> 

並確定您CalendarItem的風格:

<Style x:Key="CalenderStyleNew" TargetType="primitives:CalendarItem"> 

的問題是,日曆類型與標準System.Windows.Controls方案,但CalendarItem是從命名空間Microsoft.Windows.Controls(這是wpftoolkit命名空間你已經定義爲primitives)。所以要解決這個問題,你必須在你的樣式中使用所有的System.Windows.Controls,或者使用所有的Microsoft.Windows.Controls命名空間。

我固定您的問題使用所有Microsoft.Windows.Controls:

<Style x:Key="CalendarStyle1" TargetType="{x:Type Controls:Calendar}"> 

全球風格必須改爲:

<Style TargetType="{x:Type Controls:DatePicker}"> 
    <Setter 
    Property="CalendarStyle" 
    Value="{StaticResource CalendarStyle1}" /> 
</Style> 

並以實例化一個datepicker,您必須使用正確的:

<Controls:DatePicker /> 

<DatePicker /> 

如果您沒有從WpfToolkit命名空間中引用它,它將不會有您的自定義樣式。

乾杯, 埃裏克

+1

工作完美!萬分感謝! – Bcbury

+0

我會upvote,但我沒有足夠的代表。我很抱歉。 – Bcbury

+0

沒問題。樂意效勞。 – baueric

相關問題