2010-09-03 10 views
6

मैं DatePicker नियंत्रण में कस्टम TextBox का उपयोग करने का प्रयास कर रहा हूं, लेकिन मुझे पॉपअप कैलेंडर से TextBox पर बाध्य करने की तारीख नहीं मिल सकती है। मैं पूरे DatePicker को तब तक स्टाइल नहीं करना चाहता जब तक कि मुझे यह नहीं करना पड़े, और DatePickerTextBox का अपना नियंत्रण है, इसलिए इसे केवल बदलने के लिए एक तरीका होना चाहिए।कस्टम WPF DatePickerTextBox टेम्पलेट सहायता

<Style TargetType="{x:Type DatePickerTextBox}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type DatePickerTextBox}"> 
       <TextBox x:Name="PART_TextBox" Text="{Binding Path=SelectedDate}" /> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

मैं सही ढंग से बाध्यकारी, या PART_TextBox सही नहीं हो सकता है यह DatePicker स्वयं टेम्पलेट का हिस्सा नहीं है, क्योंकि काम नहीं कर रही: नीचे कोड क्या मैं एक शुरुआत के रूप है।

कोई कृपया मदद करें! :)

अग्रिम धन्यवाद!

उत्तर

22

इस आजमाएं:

<DatePicker> 
    <DatePicker.Resources> 
     <Style TargetType="{x:Type DatePickerTextBox}"> 
      <Setter Property="Control.Template"> 
       <Setter.Value> 
        <ControlTemplate> 
         <TextBox x:Name="PART_TextBox" 
            Text="{Binding Path=SelectedDate, RelativeSource={RelativeSource AncestorType={x:Type DatePicker}}}" /> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </DatePicker.Resources> 
</DatePicker> 
+0

यह मिला। आपका बहुत बहुत धन्यवाद! –

+0

मुझे इसके साथ कोई समस्या है: यह डिफ़ॉल्ट टेम्पलेट करता है कि छोटे/लंबे दिनांक प्रारूप का सम्मान नहीं करता है। – dex3703

+3

@ dex3707 आप टेक्स्टिंग को स्ट्रिंगफॉर्मेट जोड़ सकते हैं और प्रारूप निर्दिष्ट कर सकते हैं उदा। <टेक्स्टबॉक्स x: नाम = "PART_TextBox" टेक्स्ट = "{बाध्यकारी पथ = चयनित दिनांक, सापेक्ष स्रोत = {सापेक्ष स्रोत पूर्वजों प्रकार = {x: टाइप डेटिकर}}, स्ट्रिंगफॉर्मैट = डी}" /> – Dominik

3

मुझे पता है कि यह एक लंबे समय के लिए अब उत्तर दिया गया है, लेकिन DatePicker के पाठ संपत्ति को सीधे बाध्यकारी आसानी से कम सम्मान करने के लिए अपने नियंत्रण टेम्पलेट में TextBox की अनुमति देगा/DatePicker द्वारा प्रदान किया गया लंबा प्रारूप।

<DatePicker> 
    <DatePicker.Resources> 
     <Style TargetType="{x:Type DatePickerTextBox}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate> 
         <TextBox Text="{Binding Text, RelativeSource={RelativeSource AncestorType={x:Type DatePicker}}}" /> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </DatePicker.Resources> 
</DatePicker> 

"PART_TextBox" भी आवश्यक है क्योंकि यह DatePickerTextBox टेम्पलेट का हिस्सा नहीं है नहीं है। केवल भागों है कि DatePickerTextBox शामिल हैं:

[TemplatePart(Name = DatePickerTextBox.ElementContentName, Type = typeof(ContentControl))] 
public sealed partial class DatePickerTextBox : TextBox 

private const string ElementContentName = "PART_Watermark"; 

और TextBoxBase से विरासत में मिला ...

[TemplatePart(Name = "PART_ContentHost", Type = typeof(FrameworkElement))] 
public abstract class TextBoxBase : Control 

internal const string ContentHostTemplateName = "PART_ContentHost"; 

वैकल्पिक समाधान: आप TextBox इस्तेमाल की अनदेखी और विरासत में मिला भाग आप का उपयोग करते हैं नियंत्रण की डिफ़ॉल्ट कार्यक्षमता को बदलने के बिना DatePickerTextBox को बदलने में सक्षम हो जाएगा।

<DatePicker> 
    <DatePicker.Resources> 
     <Style TargetType="{x:Type DatePickerTextBox}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate> 
         <Grid SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"> 
          <Border BorderThickness="{TemplateBinding BorderThickness}" 
            BorderBrush="{TemplateBinding BorderBrush}" 
            Background="{TemplateBinding Background}"/> 

          <ScrollViewer Name="PART_ContentHost" 
              HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
         </Grid> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </DatePicker.Resources> 
</DatePicker> 
+0

मैं इस पर घंटों खर्च कर रहा हूं, और फिर मैंने पाया कि आपका जवाब प्रश्नों और उत्तरों के एक बड़े पैमाने पर दफनाया गया है। आपका सबसे अच्छा कार्यान्वयन है। अच्छी चीज़! – Tronald

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