2011-11-14 12 views
13

मेरे पास प्रत्येक विंडो पर एकाधिक नियंत्रण वाले एक WPF ऐप है, कुछ ओवरलेड इत्यादि, मुझे जो चाहिए वह ऐप को स्क्रीन रिज़ॉल्यूशन के आधार पर स्वचालित रूप से आकार बदलने का तरीका है।स्क्रीन रेज़ोल्यूशन पर प्रदर्शित WPF विंडो और सामग्री का आकार बदलें

कोई विचार?

+0

आपको इसकी आवश्यकता क्यों है? यदि आप बस खिड़की का आकार बदलना चाहते हैं, तो @ फिशरमेन ने आपको जवाब दिया। लेकिन अगर आप फ़ॉन्ट्स का आकार बदलना चाहते हैं, आदि। इसकी आवश्यकता नहीं है, क्योंकि डब्ल्यूपीएफ पहले से ही इसका प्रबंधन करता है। सभी डब्ल्यूपीएफ प्रतिपादन वर्चुअल निर्देशांक में काम कर रहा है, जो सिस्टम की डीपीआई सेटिंग्स के अनुसार भौतिक पिक्सेल में मैप किए जाते हैं। –

+0

क्या आप चाहते हैं कि आपकी खिड़की बिल्कुल सही आकार है जिसकी सामग्री चाहता है? इस तरह के [प्रश्न] (http://stackoverflow.com/questions/1746431/wpf-control-size-to-content) को पढ़ें। – dowhilefor

+1

लेकिन मेरे डब्ल्यूपीएफ ने सेट और फ़ॉन्ट आकार सेट को समन्वयित किया है। मूल रूप से सॉफ़्टवेयर को विभिन्न संकल्पों के लिए काम करने की आवश्यकता है –

उत्तर

19

बस बस ऐसे ही एक बाध्यकारी बनाने:

<Window x:Class="YourApplication.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="YourApplication" 
    Height="{Binding SystemParameters.PrimaryScreenHeight}" 
    Width="{Binding SystemParameters.PrimaryScreenWidth}"> 
+0

काम नहीं करता है, क्या यह तदनुसार फॉर्म पर सभी नियंत्रणों का आकार बदल देगा? –

+0

यह इस बात पर निर्भर करता है कि आपने अपना फॉर्म कैसे बनाया है। आपके पास एक फिक्स डिज़ाइन हो सकता है या नियंत्रण उनके कंटेनर के सापेक्ष आकार बदल जाएगा। – Fischermaen

+0

ओह दिलचस्प, मेरी इच्छा है कि जब मैंने शुरू किया, ओह अच्छी तरह से बीमार इसे एक खाली परियोजना पर एक परीक्षण दें और देखें कि क्या होता है। तो बस स्पष्ट करने के लिए, नियंत्रण आइटम चौड़ाई और ऊंचाई रिश्तेदार बनाने की जरूरत है? मेरे पास यह <आयताकार ऊंचाई = "100" क्षैतिज चेतावनी = "बाएं" मार्जिन = "110,48,0,0" नाम = "आयताकार 1" स्ट्रोक = "काला" लंबवत हस्ताक्षर = "शीर्ष" चौड़ाई = "200" भरें = "# एफएफडी 43939" /> , मैं विंडो के साथ इस आकार को कैसे आकार दूंगा? –

42

वाक्य रचना ऊंचाई = "{SystemParameters.PrimaryScreenHeight बाइंडिंग}" सुराग प्रदान करता है लेकिन इस तरह के रूप में काम नहीं करता है। SystemParameters.PrimaryScreenHeight स्थिर है, इसलिए आप का उपयोग करेगा:

<Window x:Class="MyApp.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:tools="clr-namespace:MyApp.Tools" 
     Height="{x:Static SystemParameters.PrimaryScreenHeight}" 
     Width="{x:Static SystemParameters.PrimaryScreenWidth}" 
     Title="{Binding Path=DisplayName}" 
     WindowStartupLocation="CenterScreen" 
     Icon="icon.ico" 
    > 

और यह पूरे स्क्रीन फिट होगा। फिर भी, आप स्क्रीन आकार के प्रतिशत फिट करना पसंद कर सकते हैं, उदा। 90%, जिस स्थिति में वाक्य रचना एक बाध्यकारी कल्पना में एक कनवर्टर के साथ संशोधन किया जाना चाहिए:

<Window x:Class="MyApp.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:tools="clr-namespace:MyApp.Tools" 
     Height="{Binding Source={x:Static SystemParameters.PrimaryScreenHeight}, Converter={tools:RatioConverter}, ConverterParameter='0.9' }" 
     Width="{Binding Source={x:Static SystemParameters.PrimaryScreenWidth}, Converter={tools:RatioConverter}, ConverterParameter='0.9' }" 
     Title="{Binding Path=DisplayName}" 
     WindowStartupLocation="CenterScreen" 
     Icon="icon.ico" 
    > 

कहाँ RatioConverter यहाँ MyApp.Tools नाम स्थान में घोषित किया जाता है इस प्रकार है:

namespace MyApp.Tools { 

    [ValueConversion(typeof(string), typeof(string))] 
    public class RatioConverter : MarkupExtension, IValueConverter 
    { 
     private static RatioConverter _instance; 

     public RatioConverter() { } 

     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { // do not let the culture default to local to prevent variable outcome re decimal syntax 
     double size = System.Convert.ToDouble(value) * System.Convert.ToDouble(parameter,CultureInfo.InvariantCulture); 
     return size.ToString("G0", CultureInfo.InvariantCulture); 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
     { // read only converter... 
     throw new NotImplementedException(); 
     } 

     public override object ProvideValue(IServiceProvider serviceProvider) 
     { 
     return _instance ?? (_instance = new RatioConverter()); 
     } 

    } 
} 

कहाँ की परिभाषा एक संसाधन के रूप में पूर्व घोषणा के बिना मूल तत्व में सीधे उपयोग करने के लिए कनवर्टर मार्कअप एक्सटेंशन से प्राप्त होगा।

+2

इच्छा है कि मैं ऊपर उठ सकता हूं एक से ज्यादा बार। – phonetagger

+0

इस प्रोग्रामेटिक रूप से 'ऊंचाई =' {बाध्यकारी स्रोत = {x: स्टेटिक सिस्टम पैरामीटर। प्राइमरीस्क्रीनहेइट}, कनवर्टर = {टूल्स: अनुपात कनवर्टर}, कनवर्टर पैरामीटर = '0.9'} " चौड़ाई =" {बाइंडिंग स्रोत = {x: स्टेटिक SystemParameters.PrimaryScreenWidth}, कनवर्टर = {उपकरण: अनुपात कनवर्टर}, कनवर्टर पैरामीटर = '0।9 '} "' –

+0

मैं फोनेटेटर से सहमत हूं यह इतना अच्छा जवाब है, बस इसे स्क्रीन आकार का प्रतिशत फिट करके, ताकि यह हमेशा फिट हो सके, चाहे कोई भी संकल्प/मॉनिटर आकार ... – AndyUK

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