2009-01-20 9 views
38

मेरे पास मेरे उपयोगकर्ता नियंत्रण के साथ एक विंडो है और मैं उपयोगकर्ता की चौड़ाई को विंडो की चौड़ाई के बराबर बनाना चाहता हूं। उसको कैसे करे?अपनी खिड़की पर एक डब्ल्यूपीएफ उपयोगकर्ता नियंत्रण चौड़ाई में कैसे फैला है?

उपयोगकर्ता नियंत्रण एक क्षैतिज मेनू और तीन स्तंभों के साथ एक ग्रिड शामिल हैं: दूसरे स्तंभ के साथ,

<ColumnDefinition Name="LeftSideMenu" Width="433"/> 
<ColumnDefinition Name="Middle" Width="*"/> 
<ColumnDefinition Name="RightSideMenu" Width="90"/> 

यही है कारण मैं खिड़की चौड़ाई चाहते हैं, 100% चौड़ाई के लिए उपयोगकर्ता नियंत्रण फैलाने के लिए रिश्तेदार।

संपादित करें:

<Window x:Class="TCI.Indexer.UI.Operacao" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:tci="clr-namespace:TCI.Indexer.UI.Controles" 
    Title=" " MinHeight="550" MinWidth="675" Loaded="Load" ResizeMode="NoResize" WindowStyle="None" WindowStartupLocation="CenterScreen" WindowState="Maximized" Focusable="True" 
    x:Name="windowOperacao"> 
    <Canvas x:Name="canv"> 
     <Grid> 
      <tci:Status x:Name="ucStatus"/> <!-- the control which I want to stretch in width --> 
     </Grid> 
    </Canvas> 
</Window> 

उत्तर

38

आपको यह सुनिश्चित करना होगा कि आपके उपयोगकर्ता नियंत्रण ने उपयोगकर्ता नियंत्रण की xaml फ़ाइल में इसकी चौड़ाई निर्धारित नहीं की है। बस से चौड़ाई = "..." हटाएं और आप जाने के लिए अच्छे हैं!

संपादित करें:

SOUserAnswerTest.xaml:

<UserControl x:Class="WpfApplication1.SOAnswerTest" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Height="300"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Name="LeftSideMenu" Width="100"/> 
      <ColumnDefinition Name="Middle" Width="*"/> 
      <ColumnDefinition Name="RightSideMenu" Width="90"/> 
     </Grid.ColumnDefinitions> 
     <TextBlock Grid.Column="0">a</TextBlock> 
     <TextBlock Grid.Column="1">b</TextBlock> 
     <TextBlock Grid.Column="2">c</TextBlock> 
    </Grid> 
</UserControl> 

Window1.xaml: इस कोड के साथ मैं यह परीक्षण किया है

<Window x:Class="WpfApplication1.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:WpfApplication1" 
    Title="Window1" Height="300" Width="415"> 
    <Grid> 

     <local:SOAnswerTest Grid.Column="0" Grid.Row="5" Grid.ColumnSpan="2"/> 
    </Grid> 
</Window> 
+0

ध्यान, अर्जन के लिए धन्यवाद। यह यहां भी ठीक काम करता है, लेकिन मेरी विंडो में कोई चौड़ाई = "415" सेट नहीं है, क्योंकि इसे पूर्ण स्क्रीन के रूप में डिज़ाइन किया गया है। जब मैं चौड़ाई निर्धारित करता हूं, यह अच्छी तरह से काम करता है। –

1

क्या कंटेनर आप UserControl जोड़ रहे हैं करने के लिए:

मैं एक ग्रिड का उपयोग कर रहा है, वहाँ खिड़की के लिए कोड है? आम तौर पर जब आप ग्रिड में नियंत्रण जोड़ते हैं, तो वे उपलब्ध स्थान को भरने के लिए खिंचाव करेंगे (जब तक कि उनकी पंक्ति/कॉलम एक निश्चित चौड़ाई तक सीमित न हो)।

2

क्या होरिज़ोंटल एलाइनमेंट को स्ट्रेच करने के लिए सेट करता है, और उपयोगकर्ता नियंत्रण पर चौड़ाई से ऑटो वांछित परिणाम प्राप्त करता है?

7

है कैनवास आपकी खिड़की में महत्वपूर्ण है? यदि नहीं, तो इसे हटाने का प्रयास करें और ग्रिड को मुख्य पैनल के रूप में रखें। कैनवास के पास निर्दिष्ट होने तक कोई आकार नहीं है, जबकि ग्रिड आमतौर पर सभी उपलब्ध स्थान लेता है। कैनवास के अंदर, ग्रिड में कोई उपलब्ध स्थान नहीं होगा।

20

डब्ल्यूपीएफ में कैनवास अधिक स्वचालित लेआउट समर्थन प्रदान नहीं करता है। मैं इस कारण से स्पष्ट करने की कोशिश करता हूं (होरिज़ोंटल एलाइनमेंट और वर्टिकल एलाइनमेंट अपेक्षित के रूप में काम नहीं करता है), लेकिन मुझे आपके कोड को इन मामूली संशोधनों के साथ काम करने के लिए मिला (नियंत्रण की चौड़ाई और ऊंचाई को कैनवास की वास्तविक विडियो/वास्तविक हाइट पर बाध्यकारी)।

<Window x:Class="TCI.Indexer.UI.Operacao" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:tci="clr-namespace:TCI.Indexer.UI.Controles" 
Title=" " MinHeight="550" MinWidth="675" Loaded="Load" 
ResizeMode="NoResize" WindowStyle="None" WindowStartupLocation="CenterScreen" 
WindowState="Maximized" Focusable="True" x:Name="windowOperacao"> 

<Canvas x:Name="canv"> 
    <Grid> 
     <tci:Status x:Name="ucStatus" Width="{Binding ElementName=canv 
                , Path=ActualWidth}" 
             Height="{Binding ElementName=canv 
                , Path=ActualHeight}"/> 
     <!-- the control which I want to stretch in width --> 
    </Grid> 
</Canvas> 

कैनवास यहां समस्या है। यदि आप वास्तव में सुविधाओं का उपयोग नहीं कर रहे हैं तो कैनवास लेआउट या जेड-ऑर्डर "स्क्वैशिंग" (फोटोशॉप में फ़्लैटन कमांड के बारे में सोचें) के संदर्भ में प्रदान करता है, तो मैं इसके बजाय ग्रिड जैसे नियंत्रण का उपयोग करने पर विचार करता हूं ताकि आप समाप्त न हों एक नियंत्रण के quirks सीखने के लिए जो आप WPF के साथ अपेक्षा करने के लिए अलग से काम करता है।

+0

धन्यवाद, वास्तविक वाइडथ के लिए बाध्यकारी ने मुझे एक ऐसे प्रोजेक्ट में मदद की जहां मेरे पास स्टैकपैनल में एक कस्टम UserControl था। स्टैकपैनल क्षैतिज एलाइनमेंट = स्ट्रैच का इस्तेमाल करता था और पूरी चौड़ाई लेता था, लेकिन उपयोगकर्ता नियंत्रण 0 चौड़ाई पर बना रहा। उपयोगकर्ता नियंत्रण को अपने मूल stackpanel पर बाध्यकारी ActualWidth इसे मेरे लिए हल किया। –

1

इसके बजाय उपयोगकर्ता नियंत्रण में चौड़ाई और ऊंचाई का उपयोग करें, मिनहाइट और मिनविड्थ का उपयोग करें। फिर आप यूसी अच्छी तरह से कॉन्फ़िगर कर सकते हैं, और अन्य विंडो के अंदर खींचने में सक्षम होंगे।

ठीक है, जैसा कि डब्ल्यूपीएफ में देख रहा हूं, माइक्रोसॉफ्ट ने विंडोज़ गुणों और व्यवहारों के बारे में फिर से सोचने की कोशिश की, लेकिन अब तक, मुझे पुराने विंडोज़ फॉर्मों से कुछ भी याद नहीं आया, डब्ल्यूपीएफ में नियंत्रण वहां हैं, लेकिन एक नए बिंदु पर मानना ​​है कि।

0

यह मेरे लिए काम किया। उपयोगकर्ता नियंत्रण के लिए कोई चौड़ाई या ऊंचाई असाइन न करें और मूल विंडो में पंक्ति और कॉलम परिभाषा को परिभाषित करें।

<UserControl x:Class="MySampleApp.myUC" 
     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" 
     mc:Ignorable="d" 
     > 
    <Grid> 

    </Grid> 
</UserControl> 


<Window xmlns:MySampleApp="clr-namespace:MySampleApp" x:Class="MySampleApp.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="auto" Width="auto" MinWidth="1000" > 
<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" />   
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" />    
    </Grid.ColumnDefinitions> 
    <MySampleApp:myUC Grid.Column="0" Grid.Row="0" />  
</Grid> 

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