2014-09-03 35 views
0

我有一個WPF應用程序。我有一個名爲Metro.xaml的資源字典。我在這個資源字典中添加了一些樣式。在我爲日曆及其部件添加控制模板之前,它運行良好。ResourceDictionary中的運行時錯誤:{「密鑰不能爲空。 r nParameter name:key」}

這裏是叫Metro.xaml的資源字典:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:c="clr-namespace:DairyManagement.Converters" 
        xmlns:powerMask="clr-namespace:DairyManagement.PowerControls.MaskedTextbox"> 

    <Style TargetType="{x:Type FrameworkElement}" x:Key="baseStyle"> 
     <Setter Property="TextElement.FontSize" Value="30" /> 
     <Setter Property="TextElement.FontFamily" Value="Nilkanth" /> 
    </Style> 

    <!--Calendar--> 

    <Style TargetType="Calendar"> 
     <Setter Property="IsTabStop" Value="False" /> 
     <Setter Property="Background"> 
      <Setter.Value> 
       <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
        <GradientStop Color="#FFD3DEE8" Offset="0" /> 
        <GradientStop Color="#FFD3DEE8" Offset="0.16" /> 
        <GradientStop Color="#FFFCFCFD" Offset="0.16" /> 
        <GradientStop Color="#FFFFFFFF" Offset="1" /> 
       </LinearGradientBrush> 
      </Setter.Value> 
     </Setter> 
     <Setter Property="BorderThickness" Value="1" /> 
     <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="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Calendar"> 
        <StackPanel x:Name="Root" HorizontalAlignment="Center"> 
         <CalendarItem x:Name="CalendarItem" Background="{TemplateBinding Background}" 
             BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" /> 
        </StackPanel> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 


    <Style TargetType="CalendarItem"> 
     <!-- eliminated--> 
    </Style> 

    <Style TargetType="CalendarDayButton"> 
     <Setter Property="Background" Value="#FFBADDE9" /> 
     <Setter Property="FontSize" Value="10" /> 
     <Setter Property="HorizontalContentAlignment" Value="Center" /> 
     <Setter Property="VerticalContentAlignment" Value="Center" /> 
     <Setter Property="MinWidth" Value="5" /> 
     <Setter Property="MinHeight" Value="5" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="CalendarDayButton"> 
        <Grid> 
         <VisualStateManager.VisualStateGroups> 
          <VisualStateGroup x:Name="CommonStates"> 
           <VisualStateGroup.Transitions> 
            <VisualTransition GeneratedDuration="0:0:0.1" /> 
           </VisualStateGroup.Transitions> 
           <VisualState x:Name="Normal" /> 
           <VisualState x:Name="MouseOver"> 
            <Storyboard> 
             <DoubleAnimation Storyboard.TargetName="Background" Storyboard.TargetProperty="Opacity" To=".5" 
                 Duration="0" /> 
            </Storyboard> 
           </VisualState> 
           <VisualState x:Name="Pressed"> 
            <Storyboard> 
             <DoubleAnimation Storyboard.TargetName="Background" Storyboard.TargetProperty="Opacity" To=".5" 
                 Duration="0" /> 
            </Storyboard> 
           </VisualState> 
           <VisualState x:Name="Disabled"> 
            <Storyboard> 
             <DoubleAnimation Storyboard.TargetName="Background" Storyboard.TargetProperty="Opacity" To="0" 
                 Duration="0" /> 
             <DoubleAnimation Storyboard.TargetName="Content" Storyboard.TargetProperty="Opacity" To=".35" 
                 Duration="0" /> 
            </Storyboard> 
           </VisualState> 
          </VisualStateGroup> 
          <VisualStateGroup x:Name="SelectionStates"> 
           <VisualStateGroup.Transitions> 
            <VisualTransition GeneratedDuration="0" /> 
           </VisualStateGroup.Transitions> 
           <VisualState x:Name="Unselected" /> 
           <VisualState x:Name="Selected"> 
            <Storyboard> 
             <DoubleAnimation Storyboard.TargetName="SelectedBackground" Storyboard.TargetProperty="Opacity" To=".75" 
                 Duration="0" /> 
            </Storyboard> 
           </VisualState> 
          </VisualStateGroup> 
          <VisualStateGroup x:Name="CalendarButtonFocusStates"> 
           <VisualStateGroup.Transitions> 
            <VisualTransition GeneratedDuration="0" /> 
           </VisualStateGroup.Transitions> 
           <VisualState x:Name="CalendarButtonFocused"> 
            <Storyboard> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetName="FocusVisual" 
                     Storyboard.TargetProperty="Visibility" Duration="0"> 
              <DiscreteObjectKeyFrame KeyTime="0" Value="Visible" /> 
             </ObjectAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState> 
           <VisualState x:Name="CalendarButtonUnfocused"> 
            <Storyboard> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetName="FocusVisual" 
                     Storyboard.TargetProperty="Visibility" Duration="0"> 
              <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed" /> 
             </ObjectAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState> 
          </VisualStateGroup> 
          <VisualStateGroup x:Name="ActiveStates"> 
           <VisualStateGroup.Transitions> 
            <VisualTransition GeneratedDuration="0" /> 
           </VisualStateGroup.Transitions> 
           <VisualState x:Name="Active" /> 
           <VisualState x:Name="Inactive"> 
            <Storyboard> 
             <ColorAnimation Storyboard.TargetName="Content" 
                 Storyboard.TargetProperty="(ContentControl.Foreground).(GradientBrush.GradientStops)[2].(GradientStop.Color)" 
                 To="#FF777777" Duration="0" /> 
             <ColorAnimation Storyboard.TargetName="Content" 
                 Storyboard.TargetProperty="(ContentControl.Foreground).(GradientBrush.GradientStops)[3].(GradientStop.Color)" 
                 To="#FF777777" Duration="0" /> 
            </Storyboard> 
           </VisualState> 
          </VisualStateGroup> 
          <VisualStateGroup x:Name="DayStates"> 
           <VisualStateGroup.Transitions> 
            <VisualTransition GeneratedDuration="0" /> 
           </VisualStateGroup.Transitions> 
           <VisualState x:Name="RegularDay" /> 
           <VisualState x:Name="Today"> 
            <Storyboard> 
             <DoubleAnimation Storyboard.TargetName="TodayBackground" Storyboard.TargetProperty="Opacity" To="1" 
                 Duration="0" /> 
             <DoubleAnimation Storyboard.TargetName="Content" 
                 Storyboard.TargetProperty="(ContentControl.Foreground).(GradientBrush.GradientStops)[1].(GradientStop.Offset)" 
                 To="1" Duration="0" /> 
             <DoubleAnimation Storyboard.TargetName="Content" 
                 Storyboard.TargetProperty="(ContentControl.Foreground).(GradientBrush.GradientStops)[2].(GradientStop.Offset)" 
                 To="1" Duration="0" /> 
            </Storyboard> 
           </VisualState> 
          </VisualStateGroup> 
          <VisualStateGroup x:Name="BlackoutDayStates"> 
           <VisualStateGroup.Transitions> 
            <VisualTransition GeneratedDuration="0" /> 
           </VisualStateGroup.Transitions> 
           <VisualState x:Name="NormalDay" /> 
           <VisualState x:Name="BlackoutDay"> 
            <Storyboard> 
             <DoubleAnimation Storyboard.TargetName="BlackoutVisual" Storyboard.TargetProperty="Opacity" To=".2" 
                 Duration="0" /> 
            </Storyboard> 
           </VisualState> 
          </VisualStateGroup> 
         </VisualStateManager.VisualStateGroups> 

         <Rectangle x:Name="TodayBackground" RadiusX="1" RadiusY="1" Opacity="0" Fill="#FFAAAAAA" /> 
         <Rectangle x:Name="SelectedBackground" RadiusX="1" RadiusY="1" Opacity="0" Fill="{TemplateBinding Background}" /> 
         <Rectangle x:Name="Background" RadiusX="1" RadiusY="1" Opacity="0" Fill="{TemplateBinding Background}" /> 

         <ContentControl x:Name="Content" IsTabStop="False" Content="{TemplateBinding Content}" 
             ContentTemplate="{TemplateBinding ContentTemplate}" 
             HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
             VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
             FontSize="{TemplateBinding FontSize}" Margin="5,1,5,1"> 
          <ContentControl.Foreground> 
           <LinearGradientBrush> 
            <GradientStop Offset="0" Color="#FFFFFFFF" /> 
            <GradientStop Offset="0" Color="#FFFFFFFF" /> 
            <GradientStop Offset="0" Color="#FF333333" /> 
            <GradientStop Offset="1" Color="#FF333333" /> 
           </LinearGradientBrush> 
          </ContentControl.Foreground> 
         </ContentControl> 

         <Path x:Name="BlackoutVisual" Opacity="0" Margin="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
           RenderTransformOrigin="0.5,0.5" Fill="#FF000000" Stretch="Fill" 
           Data="M8.1772461,11.029181 L10.433105,11.029181 L11.700684,12.801641 L12.973633,11.029181 L15.191895,11.029181 L12.844727,13.999395 L15.21875,17.060919 L12.962891,17.060919 L11.673828,15.256231 L10.352539,17.060919 L8.1396484,17.060919 L10.519043,14.042364 z" /> 
         <Rectangle x:Name="FocusVisual" Visibility="Collapsed" IsHitTestVisible="false" RadiusX="1" RadiusY="1" Stroke="#FF6DBDD1" /> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

    <Style TargetType="CalendarButton"> 
     <Setter Property="Background" Value="#FFBADDE9" /> 
     <Setter Property="FontSize" Value="10" /> 
     <Setter Property="HorizontalContentAlignment" Value="Center" /> 
     <Setter Property="VerticalContentAlignment" Value="Center" /> 
     <Setter Property="MinWidth" Value="40" /> 
     <Setter Property="MinHeight" Value="42" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="CalendarButton"> 
        <Grid> 
         <VisualStateManager.VisualStateGroups> 
          <VisualStateGroup x:Name="CommonStates"> 
           <VisualStateGroup.Transitions> 
            <VisualTransition GeneratedDuration="0:0:0.1" /> 
           </VisualStateGroup.Transitions> 
           <VisualState x:Name="Normal" /> 
           <VisualState x:Name="MouseOver"> 
            <Storyboard> 
             <DoubleAnimation Storyboard.TargetName="Background" Storyboard.TargetProperty="Opacity" 
                 To=".5" Duration="0" /> 
            </Storyboard> 
           </VisualState> 
           <VisualState x:Name="Pressed"> 
            <Storyboard> 
             <DoubleAnimation Storyboard.TargetName="Background" Storyboard.TargetProperty="Opacity" To=".5" 
                 Duration="0" /> 
            </Storyboard> 
           </VisualState> 
          </VisualStateGroup> 
          <VisualStateGroup x:Name="SelectionStates"> 
           <VisualStateGroup.Transitions> 
            <VisualTransition GeneratedDuration="0" /> 
           </VisualStateGroup.Transitions> 
           <VisualState x:Name="Unselected" /> 
           <VisualState x:Name="Selected"> 
            <Storyboard> 
             <DoubleAnimation Storyboard.TargetName="SelectedBackground" Storyboard.TargetProperty="Opacity" To=".75" 
                 Duration="0" /> 
            </Storyboard> 
           </VisualState> 
          </VisualStateGroup> 
          <VisualStateGroup x:Name="ActiveStates"> 
           <VisualStateGroup.Transitions> 
            <VisualTransition GeneratedDuration="0" /> 
           </VisualStateGroup.Transitions> 
           <VisualState x:Name="Active" /> 
           <VisualState x:Name="Inactive"> 
            <Storyboard> 
             <ColorAnimation Storyboard.TargetName="Content" 
                 Storyboard.TargetProperty="(ContentControl.Foreground).(SolidColorBrush.Color)" 
                 To="#FF777777" Duration="0" /> 
            </Storyboard> 
           </VisualState> 
          </VisualStateGroup> 
          <VisualStateGroup x:Name="CalendarButtonFocusStates"> 
           <VisualStateGroup.Transitions> 
            <VisualTransition GeneratedDuration="0" /> 
           </VisualStateGroup.Transitions> 
           <VisualState x:Name="CalendarButtonFocused"> 
            <Storyboard> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetName="FocusVisual" Storyboard.TargetProperty="Visibility" 
                     Duration="0"> 
              <DiscreteObjectKeyFrame KeyTime="0" Value="Visible" /> 
             </ObjectAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState> 
           <VisualState x:Name="CalendarButtonUnfocused"> 
            <Storyboard> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetName="FocusVisual" Storyboard.TargetProperty="Visibility" 
                     Duration="0"> 
              <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed" /> 
             </ObjectAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState> 
          </VisualStateGroup> 
         </VisualStateManager.VisualStateGroups> 

         <Rectangle x:Name="SelectedBackground" RadiusX="1" RadiusY="1" Opacity="0" Fill="{TemplateBinding Background}" /> 
         <Rectangle x:Name="Background" RadiusX="1" RadiusY="1" Opacity="0" Fill="{TemplateBinding Background}" /> 

         <ContentControl x:Name="Content" IsTabStop="False" Foreground="#FF333333" Content="{TemplateBinding Content}" 
             ContentTemplate="{TemplateBinding ContentTemplate}" 
             HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
             VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
             FontSize="{TemplateBinding FontSize}" Margin="1,0,1,1" /> 

         <Rectangle x:Name="FocusVisual" Visibility="Collapsed" IsHitTestVisible="false" RadiusX="1" RadiusY="1" Stroke="#FF6DBDD1" /> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

    <ControlTemplate x:Key="DatePickerTextBoxControlTemplate" TargetType="DatePickerTextBox"> 
     <Grid> 
      <Grid.Resources> 
       <SolidColorBrush x:Key="G">#FFAAAAAA</SolidColorBrush> 
      </Grid.Resources> 
      <VisualStateManager.VisualStateGroups> 
       <VisualStateGroup Name="CommonStates" /> 
       <VisualStateGroup Name="WatermarkStates" /> 
       <VisualStateGroup Name="FocusStates" /> 
      </VisualStateManager.VisualStateGroups> 
      <Border BorderThickness="{TemplateBinding Border.BorderThickness}" Padding="{TemplateBinding Control.Padding}" CornerRadius="1,1,1,1" 
        BorderBrush="{TemplateBinding Border.BorderBrush}" Background="{TemplateBinding Panel.Background}" Name="Border" Opacity="1"> 
       <Grid Name="WatermarkContent" HorizontalAlignment="{TemplateBinding Control.HorizontalContentAlignment}" 
         VerticalAlignment="{TemplateBinding Control.VerticalContentAlignment}"> 
        <Border BorderThickness="1,1,1,1" BorderBrush="#FFFFFFFF" Name="ContentElement" /> 
        <Border BorderThickness="1,1,1,1" BorderBrush="#FFFFFFFF" Name="watermark_decorator"> 
         <ContentControl Padding="2,2,2,2" Name="PART_Watermark" Opacity="0" IsHitTestVisible="False" Focusable="False" /> 
        </Border> 
        <ScrollViewer HorizontalContentAlignment="{TemplateBinding Control.HorizontalContentAlignment}" 
            VerticalContentAlignment="{TemplateBinding Control.VerticalContentAlignment}" 
            Name="PART_ContentHost" Margin="0,0,0,0" /> 
        <Border CornerRadius="1,1,1,1" BorderBrush="#FF45D6FA" Name="FocusVisual" Opacity="0" IsHitTestVisible="False" /> 
       </Grid> 
      </Border> 
     </Grid> 
    </ControlTemplate> 

    <Style x:Key="DatePickerCalendarStyle" 
     TargetType="{x:Type Calendar}" 
     BasedOn="{StaticResource {x:Type Calendar}}" /> 

    <!--The template for the button that displays the calendar.--> 
    <Style x:Key="DropDownButtonStyle" TargetType="Button"> 
     <!-- eliminated--> 
    </Style> 

    <!--DatePicker--> 
    <Style TargetType="{x:Type DatePicker}" BasedOn="{StaticResource baseStyle}"> 
     <!-- eliminated--> 
    </Style> 

</ResourceDictionary> 

注:我已經消除了一些風格這是沒有必要的問題,因爲stackoverflow.com不允許我有個字符超過30000

我得到一個運行時錯誤:添加值到'System.Windows.ResourceDictionary'類型的字典引發異常。

當我去到內部異常,我得到:{「鍵不能爲空\ r \ n參數名:關鍵」}

下面是內部異常的堆棧跟蹤:

at System.Collections.Hashtable.Insert(Object key, Object nvalue, Boolean add) 
at System.Collections.Hashtable.Add(Object key, Object value) 
at System.Windows.ResourceDictionary.AddWithoutLock(Object key, Object value) 
at System.Windows.ResourceDictionary.Add(Object key, Object value) 
at System.Xaml.Schema.XamlTypeInvoker.AddToDictionary(Object instance, Object key, Object item) 
at MS.Internal.Xaml.Runtime.ClrObjectRuntime.AddToDictionary(Object collection, XamlType  dictionaryType, Object value, XamlType valueXamlType, Object key) 

回答

2

一些您的樣式缺少x:Key屬性。根據this article on MSDN,在大多數情況下,樣式應具有該屬性。

+0

讓我澄清一下。如果我將日曆樣式註釋掉,那麼它可以正常工作。所以,問題部分是日曆的樣式。所以,我沒有註釋日曆的風格,並提供了一個關鍵。然後查看DatePickerCalendarStyle的樣式。我還將BasedOn屬性的值更改爲該鍵。但現在它不起作用。我的意思是它給了我同樣的錯誤。如果我刪除BasedOn然後它工作正常。 – Vishal 2014-09-03 05:50:05

+0

我剛剛將您的ResourceDictionary添加到新的WPF項目,它似乎很好。所以問題可能在別的地方。 – venerik 2014-09-03 06:14:46

+0

好的,我會試着弄清楚,並告訴你我是否有任何解決方案。 – Vishal 2014-09-03 06:15:39

相關問題