2011-01-24 16 views
31

मुझे डब्ल्यूपीएफ नहीं पता है और अब मैं इसे सीख रहा हूं। मैं WPF में गोलाकार कोनों TextBox की तलाश में था। तो मैं गूगल खोज की है और XAML का एक टुकड़ा मिला:डब्ल्यूपीएफ गोलाकार कोने टेक्स्टबॉक्स

<!–Rounded Corner TextBoxes–> 
<ControlTemplate x:Key=”RoundTxtBoxBaseControlTemplate” TargetType=”{x:Type Control}”> 
<Border Background=”{TemplateBinding Background}” x:Name=”Bd” BorderBrush=”{TemplateBinding BorderBrush}” 
BorderThickness=”{TemplateBinding BorderThickness}” CornerRadius=”6″> 
<ScrollViewer x:Name=”PART_ContentHost”/> 
</Border> 
<ControlTemplate.Triggers> 
<Trigger Property=”IsEnabled” Value=”False”> 
<Setter Property=”Background” Value=”{DynamicResource {x:Static SystemColors.ControlBrushKey}}” TargetName=”Bd”/> 
<Setter Property=”Foreground” Value=”{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}”/> 
</Trigger> 
<Trigger Property=”Width” Value=”Auto”> 
<Setter Property=”MinWidth” Value=”100″/> 
</Trigger> 
<Trigger Property=”Height” Value=”Auto”> 
<Setter Property=”MinHeight” Value=”20″/> 
</Trigger> 
</ControlTemplate.Triggers> 
</ControlTemplate> 

तो कृपया मुझे बताओ, जहां इस XAML पेस्ट करने के लिए। कृपया विस्तार से मेरी मदद करें। मैं डब्ल्यूपीएफ में एक नौसिखिया हूँ।

उत्तर

51

डब्ल्यूपीएफ में आप नियंत्रणों के स्वरूप और अनुभव को संशोधित या पुन: बना सकते हैं। तो यदि आपका उदाहरण उन्होंने जो किया है, तो उन्होंने मौजूदा TextBox के ControlTemplate को संशोधित करके टेक्स्टबॉक्स की उपस्थिति को बदल दिया है। तो देखते हैं और कोड का टुकड़ा पता लगाने के लिए बस नीचे दिए गए कोड

<Window x:Class="WpfApplication4.Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="Window1" Height="300" Width="300"> 
<Window.Resources> 
    <ControlTemplate x:Key="TextBoxBaseControlTemplate" TargetType="{x:Type TextBoxBase}"> 
     <Border Background="{TemplateBinding Background}" 
       x:Name="Bd" BorderBrush="Black" 
       BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="10"> 
      <ScrollViewer x:Name="PART_ContentHost"/> 
     </Border> 
     <ControlTemplate.Triggers> 
      <Trigger Property="IsEnabled" Value="False"> 
       <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" TargetName="Bd"/> 
       <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
      </Trigger> 
      <Trigger Property="Width" Value="Auto"> 
       <Setter Property="MinWidth" Value="100"/> 
      </Trigger> 
      <Trigger Property="Height" Value="Auto"> 
       <Setter Property="MinHeight" Value="20"/> 
      </Trigger> 
     </ControlTemplate.Triggers> 
    </ControlTemplate> 
</Window.Resources> 
<Grid> 
    <TextBox Template="{StaticResource TextBoxBaseControlTemplate}" Height="25" Margin="5"></TextBox> 
</Grid> 
का उपयोग

तो हम खिड़की के संसाधन अनुभाग में एक स्थिर संसाधन घोषित किया है और हम Template संपत्ति में संसाधन TextBoxBaseControlTemplate का इस्तेमाल किया है TextBox के Template="{StaticResource TextBoxBaseControlTemplate}" के रूप में।

टेम्पलेट्स WPF अनुकूलित करने के लिए सिर्फ इस दस्तावेज़ refere नियंत्रण एक विचार

http://msdn.microsoft.com/en-us/magazine/cc163497.aspx

4

इस सवाल का अच्छी तरह से MSDN पर चर्चा की है: http://social.msdn.microsoft.com/forums/en-US/wpf/thread/549775ed-1c2a-4911-9078-d9c724294fb3/

वहाँ समाधान का प्रयास करें, वे काफी विस्तार का एक बहुत कुछ कर रहे हैं और निश्चित रूप से पर्याप्त विस्तार आप को पता है के लिए जहां कोड डालने के लिए।

+6

मैं सरल समाधान के लिए उपयोगी पाया इस सूत्र में पिछले एक: '<पाठ बॉक्स पाठ =" CornerRadius साथ पाठ बॉक्स "> <शैली TargetType =" {x: प्रकार सीमा} "> <सेटर संपत्ति = "CornerRadius" मान = "3" /> ' – Smolla

19

@Smolla @Daniel Casserly के जवाब पर अपनी टिप्पणी में एक बहुत अच्छा जवाब था पाने के लिए:

<TextBox Text="TextBox with CornerRadius"> 
    <TextBox.Resources> 
    <Style TargetType="{x:Type Border}"> 
     <Setter Property="CornerRadius" Value="3"/> 
    </Style> 
    </TextBox.Resources> 
</TextBox> 

हैं आप टेक्स्टबॉक्स और लिस्टबॉक्स के सभी सीमाओं को गोलाकार कोनों के लिए चाहते हैं, शैली को अपनी विंडो या ऐप के <Resources> में रखें।

+0

एक बड़ा धन्यवाद। मैंने 2008 के बाद से इस बारे में कभी नहीं सोचा !!! !!! –

+0

यह उत्तर बहुत बेहतर है, IMHO। स्वीकार्य उत्तर WPF अवधारणाओं का एक अच्छा स्पष्टीकरण है, लेकिन यह उत्तर "इसे सुंदर तरीके से प्राप्त करने" के बारे में है। –

1

बस सीमा बॉक्स के चारों ओर सीमा को जोड़ने के लिए टेक्स्ट बॉक्स को शून्य पर सेट करें।

<Border BorderThickness="1" BorderBrush="Black" CornerRadius="10" Padding="2" 
     HorizontalAlignment="Center" VerticalAlignment="Center"> 
     <TextBox Text="Hello ! " BorderThickness="0"/> 
</Border> 

आउटपुट छवि में दिखाया गया है! Output!

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