2010-11-08 22 views
5

मैंने टेक्स्टबॉक्स का एक अजीब व्यवहार देखा है जबकि BorderThickness संपत्ति 1 पर सेट है - फोकस सीमा को रंग बदलने के लिए कारण बनाता है (सफेद की तरह कुछ)। हालांकि, अगर मैं सीमा से मोटाई को 1 से अलग कुछ सेट करता हूं, तो कहें .99 या 1.01 समस्या गायब हो जाती है।डब्ल्यूपीएफ में टेक्स्टबॉक्स की सीमा (बग?)

क्या यह डब्ल्यूपीएफ में बग है? या इसका इरादा है?

+0

आपका वीडियो एडाप्टर का डीपीआई क्या सेट है? क्या SnapToDevicePixels का प्रभाव पड़ता है? –

+0

मुझे लगता है कि मैं इसे पुन: उत्पन्न करने में सक्षम हूं। यदि आपके पास टेक्स्टबॉक्स है और यह फोकस हो जाता है, तो सीमा रंग बदलती है। हालांकि, अगर सीमाचित्र "1" से कुछ और है, तो यह खुश नहीं होता है। इसे कभी नहीं देखा, मुझे नहीं लगता कि मैंने पहले कभी टेक्स्टबॉक्स की सीमा तय की है। (+1) –

+0

@ हंस, मुझे लगता है कि SnapToDevicePixels का कोई उचित प्रभाव नहीं है। समस्या तब होती है जब टेक्स्टबॉक्स को मुख्य फोकस मिलता है (यानी कोई लिख रहा है और माउस टेक्स्टबॉक्स पर स्थानांतरित हो गया है)। – Jamie

उत्तर

1

यह टेक्स्टबॉक्स के लिए एयरो शैली का डिफ़ॉल्ट व्यवहार है। इसे अक्षम करने के लिए आपको टेक्स्टबॉक्स को पुन: स्थापित करना होगा। आप here से डिफ़ॉल्ट शैलियों को ले सकते हैं (डाउनलोड नमूना देखें)।

टेक्स्टबॉक्स बॉक्स (जो टेक्स्टबॉक्स आधारित है) के लिए डिफ़ॉल्ट शैली में, आप देखेंगे कि यह ListBoxChrome का उपयोग करता है। यह तत्व प्रेजेंटेशन.एरो असेंबली में परिभाषित किया गया है और "केंद्रित" लुक को प्रस्तुत करने के लिए ज़िम्मेदार है। आप आसानी से रेंडरफोकस सेटिंग और संभवतः RenderMouseOver को हटा सकते हैं, या इसे सीमा के साथ प्रतिस्थापित कर सकते हैं।

फिर आप अपने एप्लिकेशन संसाधनों में शामिल करना चाहते हैं।

<LinearGradientBrush x:Key="TextBoxBorder" 
     StartPoint="0,0" EndPoint="0,20" MappingMode="Absolute"> 
    <LinearGradientBrush.GradientStops> 
     <GradientStop Color="#ABADB3" Offset="0.05" /> 
     <GradientStop Color="#E2E3EA" Offset="0.07" /> 
     <GradientStop Color="#E3E9EF" Offset="1" /> 
    </LinearGradientBrush.GradientStops> 
</LinearGradientBrush> 

<Style x:Key="{x:Type TextBoxBase}" TargetType="{x:Type TextBoxBase}" BasedOn="{x:Null}"> 
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" /> 
    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}" /> 
    <Setter Property="BorderBrush" Value="{StaticResource TextBoxBorder}" /> 
    <Setter Property="BorderThickness" Value="1" /> 
    <Setter Property="Padding" Value="1" /> 
    <Setter Property="AllowDrop" Value="true" /> 
    <Setter Property="FocusVisualStyle" Value="{x:Null}" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type TextBoxBase}"> 
       <Border x:Name="Bd" BorderThickness="{TemplateBinding BorderThickness}" 
         BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" 
         SnapsToDevicePixels="true"> 
        <ScrollViewer x:Name="PART_ContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> 
       </Border > 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsEnabled" Value="false"> 
         <Setter TargetName="Bd" Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" /> 
         <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
<Style x:Key="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBoxBase}}" TargetType="{x:Type TextBox}"/> 

आप परावर्तक में ListBoxChrome वर्ग (विशेष रूप से OnRender विधि) को देखें, तो आप देख सकते हैं कि यह केवल ध्यान केंद्रित नज़र प्रस्तुत करना होगा अगर यह BorderThickness कि "1,1,1,1" है।

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