2011-06-29 11 views
5

मैंने डेटपिकर शैली को कस्टमाइज़ किया है, लेकिन किसी कारण से जब मैं डेटपिकर पर क्लिक करता हूं, कैलेंडर पॉपअप नहीं करता है और माउसअप सबराउटिन को सक्रिय नहीं करता है।कस्टमाइज्ड डेटपिकर कैलेंडर पॉपअप नहीं करता है

अगर मैं बटन एक्स बदल: नाम = "बटन" करने के लिए बटन एक्स: नाम = "PART_Button" कैलेंडर पॉपअप जाएगा, लेकिन TextBlocks सामग्री दिखाएगा: "कैलेंडर शो"

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:controls="clr-namespace:System.Windows.Controls;assembly=PresentationFramework" 
xmlns:iPodConv="clr-namespace:Custom_DatePicker.CustomDateConverter" 
xmlns:vsm="clr-namespace:System.Windows;assembly=PresentationFramework">   
    <Style x:Key="CustomDatePickerStyle" TargetType="controls:DatePicker"> 
     <Setter Property="IsTabStop" Value="False"/> 
     <Setter Property="Background" Value="#FFFFFFFF"/> 
     <Setter Property="Padding" Value="2"/> 
     <!--Setter Property="SelectionBackground" Value="#FF444444"/--> 
     <Setter Property="BorderBrush"> 
      <Setter.Value> 
       <LinearGradientBrush EndPoint=".5,0" StartPoint=".5,1"> 
        <GradientStop Color="#FF617584" Offset="0"/> 
        <GradientStop Color="#FF718597" Offset="0.375"/> 
        <GradientStop Color="#FF8399A9" Offset="0.375"/> 
        <GradientStop Color="#FFA3AEB9" Offset="1"/> 
       </LinearGradientBrush> 
      </Setter.Value> 
     </Setter> 
     <Setter Property="BorderThickness" Value="1"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="controls:DatePicker"> 
       <Grid x:Name="PART_Root"> 
        <Grid.Resources> 
         <SolidColorBrush x:Key="DisabledBrush" Color="#8CFFFFFF"/> 
         <ControlTemplate x:Key="DropDownButtonTemplate" TargetType="Button"> 
          <Grid> 
           <vsm:VisualStateManager.VisualStateGroups> 
            <vsm:VisualStateGroup x:Name="CommonStates"> 
             <vsm:VisualStateGroup.Transitions> 
              <vsm:VisualTransition GeneratedDuration="0"/> 
              <vsm:VisualTransition GeneratedDuration="0:0:0.1" To="MouseOver"/> 
              <vsm:VisualTransition GeneratedDuration="0:0:0.1" To="Pressed"/> 
             </vsm:VisualStateGroup.Transitions> 
             <vsm:VisualState x:Name="Normal"/> 
             <vsm:VisualState x:Name="MouseOver"> 
              <Storyboard> 
               <ColorAnimation Duration="0" Storyboard.TargetName="Background" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" To="#FF448DCA"/> 
               <ColorAnimationUsingKeyFrames BeginTime="0" Duration="00:00:00.001" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Border.Background).(GradientBrush.GradientStops)[3].(GradientStop.Color)"> 
                <SplineColorKeyFrame KeyTime="0" Value="#7FFFFFFF"/> 
               </ColorAnimationUsingKeyFrames> 
               <ColorAnimationUsingKeyFrames BeginTime="0" Duration="00:00:00.001" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Border.Background).(GradientBrush.GradientStops)[2].(GradientStop.Color)"> 
                <SplineColorKeyFrame KeyTime="0" Value="#CCFFFFFF"/> 
               </ColorAnimationUsingKeyFrames> 
               <ColorAnimationUsingKeyFrames BeginTime="0" Duration="00:00:00.001" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Border.Background).(GradientBrush.GradientStops)[1].(GradientStop.Color)"> 
                <SplineColorKeyFrame KeyTime="0" Value="#F2FFFFFF"/> 
               </ColorAnimationUsingKeyFrames> 
              </Storyboard> 
             </vsm:VisualState> 
             <vsm:VisualState x:Name="Pressed"> 
              <Storyboard> 
               <ColorAnimationUsingKeyFrames BeginTime="0" Duration="00:00:00.001" Storyboard.TargetName="Background" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"> 
                <SplineColorKeyFrame KeyTime="0" Value="#FF448DCA"/> 
               </ColorAnimationUsingKeyFrames> 
               <DoubleAnimationUsingKeyFrames BeginTime="0" Duration="00:00:00.001" Storyboard.TargetName="Highlight" Storyboard.TargetProperty="(UIElement.Opacity)"> 
                <SplineDoubleKeyFrame KeyTime="0" Value="1"/> 
               </DoubleAnimationUsingKeyFrames> 
               <ColorAnimationUsingKeyFrames BeginTime="0" Duration="00:00:00.001" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Border.Background).(GradientBrush.GradientStops)[1].(GradientStop.Color)"> 
                <SplineColorKeyFrame KeyTime="0" Value="#EAFFFFFF"/> 
               </ColorAnimationUsingKeyFrames> 
               <ColorAnimationUsingKeyFrames BeginTime="0" Duration="00:00:00.001" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Border.Background).(GradientBrush.GradientStops)[2].(GradientStop.Color)"> 
                <SplineColorKeyFrame KeyTime="0" Value="#C6FFFFFF"/> 
               </ColorAnimationUsingKeyFrames> 
               <ColorAnimationUsingKeyFrames BeginTime="0" Duration="00:00:00.001" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Border.Background).(GradientBrush.GradientStops)[3].(GradientStop.Color)"> 
                <SplineColorKeyFrame KeyTime="0" Value="#6BFFFFFF"/> 
               </ColorAnimationUsingKeyFrames> 
               <ColorAnimationUsingKeyFrames BeginTime="0" Duration="00:00:00.001" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Border.Background).(GradientBrush.GradientStops)[0].(GradientStop.Color)"> 
                <SplineColorKeyFrame KeyTime="0" Value="#F4FFFFFF"/> 
               </ColorAnimationUsingKeyFrames> 
              </Storyboard> 
             </vsm:VisualState> 
             <vsm:VisualState x:Name="Disabled"> 
              <Storyboard> 
               <DoubleAnimationUsingKeyFrames BeginTime="0" Duration="00:00:00.001" Storyboard.TargetName="DisabledVisual" Storyboard.TargetProperty="(UIElement.Opacity)"> 
                <SplineDoubleKeyFrame KeyTime="0" Value="1"/> 
               </DoubleAnimationUsingKeyFrames> 
              </Storyboard> 
             </vsm:VisualState> 
            </vsm:VisualStateGroup> 
           </vsm:VisualStateManager.VisualStateGroups> 
           <Grid Height="48" HorizontalAlignment="Center" Margin="0" VerticalAlignment="Center" Width="59" Background="#11FFFFFF"> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition Width="6*"/> 
             <ColumnDefinition Width="30*"/> 
             <ColumnDefinition Width="30*"/> 
             <ColumnDefinition Width="30*"/> 
            </Grid.ColumnDefinitions> 
            <Grid.RowDefinitions> 
             <RowDefinition Height="6*"/> 
             <RowDefinition Height="20*"/> 
             <RowDefinition Height="20*"/> 
             <RowDefinition Height="30*"/> 
            </Grid.RowDefinitions> 
            <Border x:Name="Highlight" Margin="-1" Opacity="0" Grid.ColumnSpan="4" Grid.Row="0" Grid.RowSpan="4" BorderBrush="#FF6DBDD1" BorderThickness="1" CornerRadius="0,0,1,1"/> 
            <Border x:Name="Background" Margin="0,-1,0,0" Opacity="1" Grid.ColumnSpan="4" Grid.Row="1" Grid.RowSpan="3" Background="#FF1F3B53" BorderBrush="#FFFFFFFF" BorderThickness="1" CornerRadius=".5"/> 
            <Border x:Name="BackgroundGradient" Margin="0,-1,0,0" Opacity="1" Grid.ColumnSpan="4" Grid.Row="1" Grid.RowSpan="3" BorderBrush="#BF000000" BorderThickness="1" CornerRadius=".5"> 
             <Border.Background> 
              <LinearGradientBrush EndPoint=".7,1" StartPoint=".7,0"> 
               <GradientStop Color="#FFFFFFFF" Offset="0"/> 
               <GradientStop Color="#F9FFFFFF" Offset="0.375"/> 
               <GradientStop Color="#E5FFFFFF" Offset="0.625"/> 
               <GradientStop Color="#C6FFFFFF" Offset="1"/> 
              </LinearGradientBrush> 
             </Border.Background> 
            </Border> 
            <Rectangle StrokeThickness="1" Grid.ColumnSpan="4" Grid.RowSpan="2" Margin="0,0,0,2"> 
             <Rectangle.Stroke> 
              <LinearGradientBrush EndPoint="0.48,-1" StartPoint="0.48,1.25"> 
               <GradientStop Color="#FF494949"/> 
               <GradientStop Color="#FF9F9F9F" Offset="1"/> 
              </LinearGradientBrush> 
             </Rectangle.Stroke> 
             <Rectangle.Fill> 
              <LinearGradientBrush EndPoint="0.3,-1.1" StartPoint="0.46,1.6"> 
               <GradientStop Color="#FFBD4A40"/> 
               <GradientStop Color="#FFEAAFAF" Offset="1"/> 
              </LinearGradientBrush> 
             </Rectangle.Fill> 
            </Rectangle> 
            <TextBlock 
               HorizontalAlignment="Center" 
               VerticalAlignment="Center" 
               DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=.Content}" 
               Text="{Binding Converter={StaticResource DateTimeFormatter}, ConverterParameter=DOW}" 
               FontSize="11" Margin="0,0,0,3" 
               Grid.Column="0" 
               Grid.ColumnSpan="4" 
               Grid.Row="0" 
               Grid.RowSpan="2" 
               /> 
            <TextBlock 
               HorizontalAlignment="Center" 
               VerticalAlignment="Center" 
               DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content}" 
               Text="{Binding Converter={StaticResource DateTimeFormatter}, ConverterParameter=MMMM}" 
               FontSize="10" Margin="0,10,0,3" 
               Grid.Column="0" 
               Grid.ColumnSpan="4" 
               Grid.Row="1" 
               Grid.RowSpan="2" 
               /> 
            <TextBlock 
               HorizontalAlignment="Center" 
               VerticalAlignment="Bottom" 
               DataContext="{Binding Path=Content, RelativeSource={RelativeSource TemplatedParent}}" 
               Text="{Binding Converter={StaticResource DateTimeFormatter}, ConverterParameter=dd}" 
               FontSize="26" Margin="0,0,0,-3" 
               Grid.Column="0" 
               Grid.ColumnSpan="4" 
               Grid.Row="2" 
               Grid.RowSpan="2" /> 
            <Border x:Name="PART_DisabledVisual" Opacity="0" Grid.ColumnSpan="4" Grid.Row="0" Grid.RowSpan="4" BorderBrush="#B2FFFFFF" BorderThickness="1" CornerRadius="0,0,.5,.5"/> 
           </Grid> 
          </Grid> 
         </ControlTemplate> 
        </Grid.Resources> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="*"/> 
         <ColumnDefinition Width="Auto"/> 
        </Grid.ColumnDefinitions> 
        <vsm:VisualStateManager.VisualStateGroups> 
         <vsm:VisualStateGroup x:Name="CommonStates"> 
          <vsm:VisualState x:Name="Normal"/> 
          <vsm:VisualState x:Name="Disabled"> 
           <Storyboard> 
            <DoubleAnimation Duration="0" Storyboard.TargetName="DisabledVisual" Storyboard.TargetProperty="Opacity" To="1"/> 
           </Storyboard> 
          </vsm:VisualState> 
         </vsm:VisualStateGroup> 
        </vsm:VisualStateManager.VisualStateGroups> 
        <Button x:Name="Button" Grid.Column="0" Grid.ColumnSpan="4" 
           Content="{TemplateBinding SelectedDate}" 
           Template="{StaticResource DropDownButtonTemplate}" 
           Margin="2,0,2,0" 
           Width="60" 
           BorderBrush="{TemplateBinding BorderBrush}" 
           BorderThickness="{TemplateBinding BorderThickness}" 
           Foreground="{TemplateBinding Foreground}"/> 
        <Grid x:Name="DisabledVisual" IsHitTestVisible="False" Opacity="0" Grid.ColumnSpan="2"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="*"/> 
          <ColumnDefinition Width="Auto"/> 
         </Grid.ColumnDefinitions> 
         <Rectangle Fill="#8CFFFFFF" RadiusX="1" RadiusY="1"/> 
         <Rectangle Fill="#8CFFFFFF" RadiusX="1" RadiusY="1" Height="18" Margin="2,0,2,0" Width="24" Grid.Column="1"/> 
        </Grid> 

        <Popup x:Name="PART_Popup" 
          PlacementTarget="{Binding ElementName=Button}" 
          Placement="Bottom" 
          StaysOpen="False" 
          AllowsTransparency="True" 
          PopupAnimation="Slide" 
          Focusable="True" /> 
       </Grid> 
      </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</ResourceDictionary> 

कोई मदद आभार समझा जायेगा।

उत्तर

4

यदि आप नामित भागों (यानी "पीईएफ" से शुरू होने वाले नामों के साथ नियंत्रण करते हैं) तो आप आमतौर पर कुछ कार्यक्षमता खो देंगे। आपके मामले में, निम्नलिखित कोड DatePicker के OnApplyTemplate में है:

this._dropDownButton = (base.GetTemplateChild("PART_Button") as Button); 
if (this._dropDownButton != null) 
{ 
    this._dropDownButton.Click += new RoutedEventHandler(this.DropDownButton_Click); 
    this._dropDownButton.AddHandler(UIElement.MouseLeaveEvent, new MouseEventHandler(this.DropDownButton_MouseLeave), true); 
    if (this._dropDownButton.Content == null) 
    { 
     this._dropDownButton.Content = SR.Get("DatePicker_DropDownButtonName"); 
    } 
} 

आप देख सकते हैं कि DatePicker, सामग्री सेट अगर शून्य, और एक क्लिक के हैंडलर पंजीकृत करता है। जिसके बाद पॉपअप खुलता है।

अब, जब OnApplyTemplate को चुना गया दिनांक कहा जाता है तो संभवतः शून्य है, इसलिए यही कारण है कि डेटपिकर बटन की सामग्री सेट करता है। आपको यह सुनिश्चित करने की आवश्यकता होगी कि डेटपिकर को सामग्री सेट करने से रोकने के लिए चयनित दिनांक शून्य नहीं है।

एक तरह से {Binding RelativeSource={RelativeSource TemplatedParent}, Path=SelectedDate, TargetNullValue="1/1/2011"} की तरह कुछ का उपयोग किया जा सकता है, लेकिन आप लंबे वाक्य विन्यास का उपयोग करना पड़ सकता है:

xmlns:system="clr-namespace:System;assembly=mscorlib" 
<!-- ... --> 
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="SelectedDate"> 
    <Binding.TargetNullValue> 
     <system:DateTime>1/1/2011</system:DateTime> 
    </Binding.TargetNullValue> 
</Binding> 
+1

धन्यवाद मैं इस अब लगभग 2 सप्ताह के लिए पता लगाने की कोशिश की दीवार के खिलाफ मेरे सिर पिटाई कर दिया है । मैंने सबकुछ PART_Button में बदल दिया है, जैसा कि सुझाव दिया गया है और PART_Button Content = "{TemplateBinding SelectedDate}" को सामग्री = "{बाध्यकारी पथ = चयनित दिनांक, सापेक्ष स्रोत = {सापेक्ष स्रोत टेम्पलेटेड माता-पिता}, TargetNullValue = 1/1/2011}" – osMike

+1

उपर्युक्त टिप्पणी थोड़ा पतला है (हालांकि सही)। मूल रूप से एक्स: नाम = "बटन", एक्स: नाम = "टेक्स्टबॉक्स", एक्स: नाम = "पॉपअप" x: नाम "PART_Button", PART_TextBox, और PART_Popup क्रमशः – Toadums

संबंधित मुद्दे