2009-04-15 17 views
24

मैं WPF में एक बटन की डिफ़ॉल्ट टेक्स्टवैपिंग शैली कैसे बदलूं?डब्ल्यूपीएफ बटन टेक्स्टव्रप शैली

का स्पष्ट समाधान:

<Style x:Key="MyButtonStyle" TargetType="{x:Type Button}"> 
    <Setter Property="TextWrapping" Value="Wrap"></Setter> 
</Style> 

काम नहीं करता, क्योंकि Textwrapping, एक settable संपत्ति यहां नहीं है जाहिरा तौर पर।

अगर मैं कोशिश:

<Style x:Key="MyButtonStyle" TargetType="{x:Type Button}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Button}"> 
       <TextBlock Text="{Binding}" Foreground="White" FontSize="20" FontFamily="Global User Interface" TextWrapping="Wrap"/> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

मैं सिर्फ संकलक से एक बेकार प्रतिक्रिया मिल:

Error 5 After a 'SetterBaseCollection' is in use (sealed), it cannot be modified. 

निकाला जा रहा है ControlTemplate टैग त्रुटि रहता है।

निम्नलिखित प्रयास कोई दूसरी त्रुटि पैदावार:

<Setter Property="TextBlock"> 
     <TextBlock Text="{Binding}" Foreground="White" FontSize="20" FontFamily="Global User Interface" TextWrapping="Wrap"/> 
    </Setter> 

Error 5 The type 'Setter' does not support direct content. 

मैं देख रहा हूँ मैं व्यक्तिगत रूप से प्रत्येक बटन के लिए textwrapping सेट कर सकते हैं कि, लेकिन वह बहुत मूर्खतापूर्ण है। मैं इसे शैली के रूप में कैसे कर सकता हूं? जादू शब्द क्या हैं?

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

उत्तर

24

आपका दूसरा संस्करण काम करना चाहिए, और चेतावनी है कि आप TextBlock पाठ बंधन को बदलने की जरूरत के साथ, मेरे लिए करता है:

<!-- in Window.Resources --> 
<Style x:Key="fie" TargetType="Button"> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type Button}"> 
     <TextBlock Text="{TemplateBinding Content}" FontSize="20" TextWrapping="Wrap"/> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 

<!-- then --> 
<Button Style="{StaticResource fie}">verylongcaptiongoeshereandwraps/Button> 

नोट यह पूरी तरह से बटन शैली को बदल देता है (यानी आप बनाने की आवश्यकता होगी आपकी यदि आप इसे चाहते हैं तो अपने बटन क्रोम)।

आपके दूसरे प्रश्न के संबंध में, सभी लिखने योग्य निर्भरता गुणों को एक सेटर का उपयोग करके सेट किया जा सकता है। एक शैली के माध्यम से एक बटन पर टेक्स्टव्रपिंग सेट करने में असमर्थ होने का कारण यह है कि बटन में टेक्स्टव्रपिंग निर्भरता संपत्ति (या वास्तव में कोई टेक्स्टप्रैपिंग प्रॉपर्टी नहीं है)। कोई "जादू शब्द" नहीं हैं, केवल निर्भरता गुणों के नाम हैं।

+1

नहीं, जादुई शब्द हैं। इस मामले में, जादू शब्द "टेम्पलेट बाइंडिंग सामग्री" थे। मुझे बताने के लिए धन्यवाद। – mmr

36

मैंने बटन पर TextBlock जोड़कर और इस समस्या का समाधान बटन के Content संपत्ति के बजाय बटन टेक्स्ट प्रदर्शित करने के लिए किया। TextBlock की ऊंचाई संपत्ति को Auto पर सेट करना सुनिश्चित करें, ताकि यह टेक्स्ट की लाइनों की संख्या को समायोजित करने के लिए ऊंचाई में बढ़ता जा सके।

+6

स्वीकार्य उत्तर से यह निश्चित रूप से आसान/साफ है, लेकिन उसका तरीका भी काम करता है। –

+0

आवश्यक कोड के उदाहरण के लिए नीचे दिए गए उत्तरों देखें। –

32

एक उदाहरण के साथ एरिक के जवाब विस्तार करने के लिए: -

<Button Name="btnName" Width="50" Height="40"> 
    <TextBlock Text="Some long text" TextWrapping="Wrap" TextAlignment="Center"/> 
</Button> 
4

यहाँ सी # कोड-पीछे में एरिक के जवाब का एक उदाहरण है:

var MyButton = new Button(); 

MyButton.Content = new TextBlock() { 
    FontSize  = 25, 
    Text   = "Hello world, I'm a pretty long button!", 
    TextAlignment = TextAlignment.Center, 
    TextWrapping = TextWrapping.Wrap 
}; 
3
<Style TargetType="Button"> 
    <Setter Property="ContentTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <TextBlock Text="{TemplateBinding Content}" TextWrapping="Wrap" /> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
संबंधित मुद्दे