WPF

2012-03-21 7 views
26

में * ग्रिड कॉलम की चौड़ाई को प्रोग्रामेटिक रूप से सेट करना मैं प्रोग्रामिंग रूप से एक wpf ग्रिड कॉन्फ़िगर करना चाहता हूं।WPF

मैं 2 कॉलम के साथ ग्रिड सेट करने में सक्षम होना चाहता हूं, पहले उपलब्ध स्थान का 20% लेना, दूसरा 80% लेना। Xaml में मैं * ऑपरेटर का उपयोग करूंगा लेकिन मैं इस प्रोग्रामेटिक तरीके से कैसे काम कर सकता हूं।

Xaml में मैं करना होगा:

<Grid> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition width="20*" /> 
    <ColumnDefinition width="80*" /> 
</Grid> 

कोड में मैं क्या करना चाहते हैं:

Grid grid = new Grid(); 
grid.ColumnDefinitions.Add(new ColumnDefinition(20*)); 
grid.ColumnDefinitions.Add(new ColumnDefinition(80*)); 

कृपया किसी को सलाह देने के कर सकते हैं।

+2

संभव डुप्लिकेट (http://stackoverflow.com/questions/5459595/grid-star-size-in-code-behind) –

उत्तर

70
Grid grid = new Grid(); 
ColumnDefinition c1 = new ColumnDefinition(); 
c1.Width = new GridLength(20, GridUnitType.Star); 
ColumnDefinition c2 = new ColumnDefinition(); 
c2.Width = new GridLength(80, GridUnitType.Star); 
grid.ColumnDefinitions.Add(c1); 
grid.ColumnDefinitions.Add(c2); 
+1

और MVVM तरीका है? मेरा मतलब है, आप एक व्यूमोडेल संपत्ति के माध्यम से int मान सेट कर सकते हैं लेकिन "स्टार" के बारे में क्या? – Legends

+0

आप निर्भरता प्रॉपर्टी या INotifyPropertyChanged के माध्यम से 'ग्रिड लम्बाई' के प्रकार की व्यूमोडेल संपत्ति से जुड़ सकते हैं। '" 1 * "' केवल ['ग्रिड लम्बाई 'संरचना का एक स्ट्रिंग प्रतिनिधित्व है (https://msdn.microsoft.com/en-US/library/system.windows.gridlength (v = vs.110) .aspx)। – Adwaenyth

13

मान लीजिए आप एक पेज में कुछ बटन (क्षैतिज गठबंधन) और छिपाने/कुछ स्थिति आधार पर कुछ को दिखाने की जरूरत है।

<Grid HorizontalAlignment="Center" Grid.Column="1" Width="340" VerticalAlignment="Center" Background="Transparent"> 
     <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="2*" x:Name="colOne"></ColumnDefinition> 
       <ColumnDefinition Width="0" x:Name="colTwo"></ColumnDefinition> 
       <ColumnDefinition Width="0" x:Name="colThree"></ColumnDefinition> 
       <ColumnDefinition Width="0" x:Name="colFour"></ColumnDefinition> 
     </Grid.ColumnDefinitions> 

     <Button x:Name="btnOne" Grid.Column="0" Height="50" Width="50" Content="One" Cursor="Hand" /> 
     <Button x:Name="btnTwo" Grid.Column="1" Height="50" Width="50" Content="Two" Cursor="Hand" /> 
     <Button x:Name="btnThree" Grid.Column="2" Height="50" Width="50" Content="Thre" Cursor="Hand" /> 
     <Button x:Name="btnFour" Grid.Column="3" Height="50" Width="50" Content="Four" Cursor="Hand" /> 
</Grid> 

यहां बीटीएनओ निष्पादित होने पर पृष्ठ में दिखाई देगा। btnOne भी केंद्र में गठबंधन किया जाएगा। आप क्रम में किसी भी बटन की दृश्यता बीच टॉगल कर सकते

private void btnOne_Click(object sender, RoutedEventArgs e) 
{ 
    SetGridColWidth(colOne, false); 
    SetGridColWidth(colThree, true); 
    SetGridColWidth(colFour, true); 
} 

private void SetGridColWidth(ColumnDefinition column, bool show) 
{ 
    if (show) 
     column.Width = new GridLength(2, GridUnitType.Star); 
    else 
     column.Width = new GridLength(0); 
} 

: अब अगर हम तीन और चार प्रदर्शित करने के लिए और एक जब एक पर क्लिक किया छिपा हो करना चाहते हैं, हम इस कोड का उपयोग कर सकते हैं।

उम्मीद है कि यह किसी की मदद करेगा!

1
In MVVM way: 
------------ 
*XAML(View) code:* 

    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="{Binding FirstColumn}"/> 
      <ColumnDefinition Width="{Binding SecondColumn}"/> 
     </Grid.ColumnDefinitions> 
    </Grid> 

**ViewModel (C#) code** 

public class MyViewModel : BindableBase 
{ 
    private GridLength _firstColumn; 
    private GridLength _secondColumn; 

    public MyViewModel() 
    { 
     _firstColumn = new GridLength(75, GridUnitType.Star); 
     _secondColumn = new GridLength(25, GridUnitType.Star); 
    } 

    public GridLength FirstColumn 
    { 
     get { return _firstColumn; } 
     set { SetProperty(ref _firstColumn, value); } 
    } 

    public GridLength SecondColumn 
    { 
     get { return _secondColumn; } 
     set { SetProperty(ref _secondColumn, value); } 
    } 

    private void NotifyToggleFullScreen(bool isToggleExpansion) 
    { 
     if (isToggleExpansion) 
     { 
      FirstColumn = new GridLength(0, GridUnitType.Auto); 
      SecondColumn = new GridLength(100, GridUnitType.Star); 
     } 
     else 
     { 
      FirstColumn = new GridLength(75, GridUnitType.Star); 
      SecondColumn = new GridLength(25, GridUnitType.Star); 
     } 
    } 
} 
की [कोड में ग्रिड स्टार आकार के पीछे]
संबंधित मुद्दे