2014-10-08 51 views
0

我知道這已被問了好幾次,但無論我讀了多少個教程,我都無法理解它。我有一個有三個ColumnDefinitions的網格,可以通過兩個GridSplitter調整大小。我想要的是它下面的另一個網格,有三個ColumnDefinitions,當頂部網格被調整大小時(與iTunes一樣的程序中的UI非常相似),調整大小。我想單獨的網格的原因是因爲最終,每個網格將是它自己的對象,並將需要拖放屬性。這裏是我寫的Xaml,如果有人想看看我在看什麼。WPF基本綁定

<Canvas Width="400" Height="15" Background="AntiqueWhite"> 
     <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="400" Name='Maingrid'> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="140" MinWidth="50"/> 
       <ColumnDefinition Width="116" MinWidth="50"/> 
       <ColumnDefinition Width="144" MinWidth="50"/> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="15"/> 
      </Grid.RowDefinitions> 
      <GridSplitter Grid.Column="0" 
      HorizontalAlignment="Right" 
      VerticalAlignment="Stretch" 
      Background="Black" 
      ShowsPreview="True" 
      Width="2" 
      /> 
      <GridSplitter Grid.Column="1" 
      HorizontalAlignment="Right" 
      VerticalAlignment="Stretch" 
      Background="Black" 
      ShowsPreview="True" 
      Width="2" 
      /> 
      <TextBlock Text="Song" Grid.Column="0" Width="30"/> 
      <TextBlock Text="Song" Grid.Column="1" Width="30"/> 
      <TextBlock Text="Song" Grid.Column="2" Width="30"/> 
     </Grid> 
    </Canvas> 

    <Canvas Width="400" Height="15" Background="RosyBrown" Margin="58,168,59,138"> 
     <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="400"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="140" MinWidth="50"/> 
       <ColumnDefinition Width="116" MinWidth="50"/> 
       <ColumnDefinition Width="144" MinWidth="50"/> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="15"/> 
      </Grid.RowDefinitions> 
      <TextBlock Text="Song" Grid.Column="0" Width="30"/> 
      <TextBlock Text="Song" Grid.Column="1" Width="30"/> 
      <TextBlock Text="Song" Grid.Column="2" Width="30"/> 
     </Grid> 
    </Canvas> 

而且作爲最後一點,我已經看了無窮無盡的教程和指南的數據綁定和我17歲的大腦似乎無法環繞它我的頭。如果我能夠理解如何將文本塊綁定到我的C#代碼隱藏中的變量(又名:不在代碼隱藏中設置文本塊的文本屬性,而只是更改字符串的內容),我就能夠變得如此之多更高效。謝謝任何能夠幫助我的人,我知道這個問題已經被問了一百萬次。

+0

你問這裏的兩個問題,@ hosch250已經回答了第一個,雖然我已經(也許是不好)回答第二 – paul 2014-10-08 15:55:06

+0

別擔心,我花了幾天(超過一週?)來理解數據綁定,但是當我理解它時,它實現得非常快。一旦你理解了單向綁定,玩了一段時間的雙向綁定,學習轉換器,你會很好。 – Hosch250 2014-10-08 15:56:56

回答

1

在你的C#代碼隱藏,創建一個屬性:

private string _songTitle; 
public string SongTitle { get { return _songTitle; } set { songTitle = value; } } 

在XAML中,創建一個綁定:您結合

<TextBlock Text="{Binding SongTitle}" /> 

設置的DataContext(你可以把這個在Window.Loaded事件)

this.DataContext = this; 

在代碼中設置你的財產

SongTitle = "Some words and stuff"; 

就是這樣。它可以變得更復雜,但這是基礎。

+0

NotifyPropertyChange應該實現,如果他希望更改反映在UI中。 – BenjaminPaul 2014-10-08 15:47:16

+0

是的,試圖保持簡單。 – paul 2014-10-08 15:47:56

0

這是一種無代碼的方法。只需給出第一個列定義名稱,然後將較低的列定義寬度綁定到第一個網格中相應列定義的寬度。乾淨和簡單,背後惹沒有代碼:

<Canvas Width="400" Height="15" Background="AntiqueWhite"> 
    <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="400" Name='Maingrid'> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Name="Grid1Col1" Width="140" MinWidth="50"/> 
      <ColumnDefinition Name="Grid1Col2" Width="116" MinWidth="50"/> 
      <ColumnDefinition Name="Grid1Col3" Width="144" MinWidth="50"/> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="15"/> 
     </Grid.RowDefinitions> 
     <GridSplitter Grid.Column="0" 
     HorizontalAlignment="Right" 
     VerticalAlignment="Stretch" 
     Background="Black" 
     ShowsPreview="True" 
     Width="2" 
     /> 
     <GridSplitter Grid.Column="1" 
     HorizontalAlignment="Right" 
     VerticalAlignment="Stretch" 
     Background="Black" 
     ShowsPreview="True" 
     Width="2" 
     /> 
     <TextBlock Text="Song" Grid.Column="0" Width="30"/> 
     <TextBlock Text="Song" Grid.Column="1" Width="30"/> 
     <TextBlock Text="Song" Grid.Column="2" Width="30"/> 
    </Grid> 
</Canvas> 

<Canvas Width="400" Height="15" Background="RosyBrown" Margin="58,168,59,138"> 
    <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="400"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="{Binding Width, ElementName=Grid1Col1}" MinWidth="50"/> 
      <ColumnDefinition Width="{Binding Width, ElementName=Grid1Col1}" MinWidth="50"/> 
      <ColumnDefinition Width="{Binding Width, ElementName=Grid1Col1}" MinWidth="50"/> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="15"/> 
     </Grid.RowDefinitions> 
     <TextBlock Text="Song" Grid.Column="0" Width="30"/> 
     <TextBlock Text="Song" Grid.Column="1" Width="30"/> 
     <TextBlock Text="Song" Grid.Column="2" Width="30"/> 
    </Grid> 
</Canvas>