2010-07-12 13 views
9

मैं पर .NET 3.5 और VisualStudio 2010, जिसमें FontSize स्वचालित रूप से पाठ नियंत्रण क्षेत्र को भरने कर देगा WPFमें एक Label नियंत्रण विकसित करने के लिए, की जरूरत है करने के लिए।WPF लेबल अनुकूलन FONTSIZE यह चौड़ाई और ऊंचाई

मैं अगर मैं बनाना चाहिए एक CustomControlLabel से इनहेरिट या अगर मैं एक UserControl जो एक Label नियंत्रण शामिल हैं बनाना चाहिए पता नहीं है।

मैंने ValueConverter का उपयोग करके यहां एक उदाहरण देखा है, लेकिन मैं इसके व्यवहार को समझ नहीं रहा हूं, यहां: change font size dynamically

क्या कोई मुझे इसके बारे में एक सुराग दे सकता है?

अद्यतन:

मैं solutiion उदाहरण से DoubleConverter का उपयोग कर रहा से पहले पोस्ट किया है पाया:

soultion एक ValueConverter, जो मैं उदाहरण से निकाला उपयोग कर रहा है, लेकिन NumerFormat जोड़ा IFormatProvider सही ढंग से पार्स करने के लिए "0.1" मूल्य, मैंने पाया Decimal d1 = Decimal.Parse("0.1"); // = 1?!? पर कि:

[ValueConversion(typeof(object), typeof(double))] 
public class DoubleConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, 
    object parameter, CultureInfo culture) 
    { 
    double dblValue = (double)value; 
    double scale = Double.Parse(((string)parameter), System.Globalization.CultureInfo.InvariantCulture.NumberFormat); 
    return dblValue * scale; 
    } 

    public object ConvertBack(object value, Type targetType, 
    object parameter, CultureInfo culture) 
    { 
    throw new NotImplementedException(); 
    } 
} 

उसके बाद, आप XAML 012,399,244 में दृष्टांत के लिए है, और निर्दिष्ट FonSize संपत्ति में बाध्यकारी:

<UserControl x:Class="<Namespace>.LabelAutoFontSize" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:me="clr-namespace:<Namespace>" 
    mc:Ignorable="d" 
    d:DesignHeight="60" d:DesignWidth="278"> 
<UserControl.Resources> 
<me:DoubleConverter x:Key="doubleConverter" /> 
</UserControl.Resources> 
<Grid> 
<Label 
    x:Name="lbl" 
    FontSize="{ 
    Binding Path=Width, 
    RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, 
    Converter={StaticResource doubleConverter}, 
    ConverterParameter=0.116}" 

    VerticalAlignment="Stretch" 
    HorizontalAlignment="Stretch" 
    Content="LabelAutoFontSize" 
    d:LayoutOverrides="Width" 
    HorizontalContentAlignment="Center" 
    VerticalContentAlignment="Center" /> 
</Grid> 
</UserControl> 

एक महत्वपूर्ण बात यह है कि ConverterParameter के लिए मूल्य सौंपा फ़ॉन्ट से बिल्कुल निर्भर करता है। प्रत्येक फ़ॉन्ट को एक अलग मूल्य की आवश्यकता हो सकती है और सही मूल्य को ठीक से फिट करने के लिए आपको "चारों ओर खेलना होगा"।

+1

खैर मैं अंत में इस तरह से इस्तेमाल किया और छोड़ दिया। – JoanComasFdz

+1

आपको अपना समाधान एक उत्तर के रूप में जोड़ना चाहिए और इसे सही के रूप में चिह्नित करना चाहिए। –

उत्तर

27
<Viewbox> 
    <TextBlock>asd</TextBlock> 
</Viewbox> 

नौकरी भी करता है। काफी सरल और प्रभावी:

+1

यह न भूलें कि आप स्ट्रेटच डायरेक्शन का उपयोग केवल तभी आकार में कर सकते हैं जब यह फिट न हो ... लेकिन फिट होने पर इसे अकेला छोड़ दें। – cplotts

+0

जबकि व्यूबॉक्स चाल काम करता है, यह पहले से ही प्रस्तुत पाठ का आकार बदलता है, जो कि उतना तेज नहीं हो सकता है जितना कि वास्तव में उचित आकार में प्रस्तुत किया गया था। – reuscam

+2

@reuscam: मुझे नहीं लगता कि यह व्यूबॉक्स काम करता है। यह पहले से प्रस्तुत सामग्री का आकार बदलता नहीं है, यह रूपांतरणों को लागू करता है जब सामग्री प्रदान की जाती है। कम से कम मुझे आशा है कि ऐसा ऐसा होगा, क्योंकि यह डब्ल्यूपीएफ की प्रतिपादन अवधारणा का हिस्सा है। –

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