2010-01-06 8 views
7

मेरे पास Viewbox है जिसमें TextBlock एस हैं जो स्केल किए गए हैं और ViewBox द्वारा पूरी तरह से स्थित हैं। कुछ इस तरह: उपयोगकर्ता आकार बदलता है Viewbox इसकी सामग्री पूरी तरह से मिलान करने के लिए दिया जाता हैमैं WPF व्यूबॉक्स में निरंतर फ़ॉन्ट आकार कैसे रखूं?

<Viewbox Stretch="Uniform"> 
    <Canvas Width="100" Height="100"> 
     <Ellipse Width="100" Height="100" Stroke="Black"/> 
     <TextBlock Width="100" TextAlignment="Center" FontSize="12">Top Center</TextBlock> 
    </Canvas> 
</Viewbox> 

हैं। हालांकि Viewbox के वास्तविक आकार के बावजूद मैं FontSize से 12 रखना चाहता हूं।

मैं यह कैसे कर सकता हूं? क्या मैं इसे Resize ईवेंट से जोड़ने के बिना एक्सएएमएल में कर सकता हूं?

उत्तर

10

ViewBox आपको निरंतर फ़ॉन्ट आकार रखने की अनुमति नहीं देगा, यह सिर्फ यह नहीं है कि यह कैसे काम करता है।

<Grid> 
    <Viewbox Stretch="Uniform"> 
     <Canvas Width="100" Height="100"> 
      <Ellipse Width="100" Height="100" Stroke="Black"/> 
     </Canvas> 
    </Viewbox> 
    <TextBlock TextAlignment="Center" FontSize="12">Top Center</TextBlock> 
</Grid> 

ध्यान दें कि मैं TextBlock से चौड़ाई संपत्ति को हटा दिया, मैं तो बस यह ग्रिड की चौड़ाई के लिए खिंचाव है, दे पाठ संरेखण ले: आप ऐसा करने के लिए दृश्य बॉक्स के बाहर पाठ लगाने की जरूरत है केंद्र की देखभाल।

या, आप रचनात्मक होना होगा और ViewBox की ActualWidth करने के लिए FontSize संपत्ति के लिए बाध्य है और यह उचित रूप से पैमाने रहा है, उदाहरण के लिए कर सकते हैं:

कनवर्टर:

class ViewBoxConstantFontSizeConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (!(value is double)) return null; 
     double d = (double)value; 
     return 100/d * 12; 
    } 

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

उपयोग:

<Window.Resources> 
    ... 
    <local:ViewBoxConstantFontSizeConverter x:Key="conv"/> 
</Window.Resources> 
... 
<Viewbox Name="vb" Stretch="Uniform"> 
    <Canvas Width="100" Height="100"> 
     <Ellipse Width="100" Height="100" Stroke="Black"/> 
     <TextBlock Width="100" TextAlignment="Center" 
        FontSize="{Binding ElementName=vb, 
             Path=ActualWidth, 
             Converter={StaticResource conv}}"> 
      Top Center 
     </TextBlock> 
    </Canvas> 
</Viewbox> 
+1

धन्यवाद। मुझे लगता है कि मैंने अपना उदाहरण थोड़ा सा सरल बना दिया है। मुझे अपने टेक्स्ट की स्थिति का ख्याल रखने के लिए व्यूबॉक्स की आवश्यकता है, लेकिन यह फ़ॉन्ट आकार नहीं है। – Hallgrim

+1

मेरे उत्तर के लिए एक विकल्प जोड़ा गया, इसे आजमाएं। यह थोड़ा अधिक है, लेकिन यह काम कर सकता है :) –

+0

प्रभावशाली! यह काम करता था, लेकिन मैं कुछ आसान के लिए उम्मीद कर रहा था। – Hallgrim

7

यह भी एक आसान फिक्स हो सकता है।

<Viewbox StretchDirection="DownOnly" > 
    <Label Content="Enable" FontSize="10" FontStretch="Normal" /> 
</Viewbox> 
संबंधित मुद्दे