2011-04-07 133 views
0

我已經在treeviewitem中創建了一個stackpanel。我試圖讓我的照片旁邊的複選框和我的照片框旁邊的文字,但我不知道該怎麼做。目前這種情況正在發生:C#WPF Stackpanel佈局

http://img854.imageshack.us/i/naamloosl.png/

這是我的代碼:

ComboBoxItem tempComboItem = comboBox1.SelectedItem as ComboBoxItem; 
     CheckBox cbox = new CheckBox(); 

     StackPanel panel = new StackPanel(); 
     panel.Width = 260; 
     Label labelTitle = new Label(); 
     Label labelStatus = new Label(); 
     Image newImage = new Image(); 



     newImage.Source = new BitmapImage(new Uri(imageTextBox1.Text)); 
     newImage.Width = 85; 
     newImage.Height = 65; 

     panel.Children.Add(newImage); 

     labelTitle.Content = itemTextBox1.Text; 
     panel.Children.Add(labelTitle); 



     labelStatus.Content = "Beschikbaar"; 
     panel.Children.Add(labelStatus); 


     labelStatus.Foreground = Brushes.Lime; 

     cbox.Content = panel; 

     TreeViewItem newChild = new TreeViewItem(); 
     newChild.Header = cbox; 

有人能幫助我。

我希望複選框和圖像和文本是水平的。我可以用:panel.Orientation.

但是這兩個文本標籤在右邊,我想讓它們垂直,一個在另一個下面。

我該怎麼做?

+2

你爲什麼這樣做?使用ItemTemplate會不會更容易? – 2011-04-07 11:30:48

+0

確實。使用將我的答案中的xaml放在DataTemplate中,並將其分配給Treeview的ItemTemplate屬性(不要忘記使用「{Binding}」而不是硬編碼值) – 2011-04-07 12:28:29

回答

4

我會做以下XAML:(如果你需要幫助,把它變成代碼讓我知道)

<CheckBox> 
     <Grid> 
      <Grid.RowDefinitions> 
       <RowDefinition /> 
       <RowDefinition /> 
      </Grid.RowDefinitions> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition /> 
       <ColumnDefinition /> 
      </Grid.ColumnDefinitions> 
      <Image Grid.RowSpan="2" 
        Width="85" 
        Height="65" /> 
      <TextBlock Grid.Row="0" 
         Grid.Column="1" 
         Text="Title" /> 
      <TextBlock Grid.Row="1" 
         Grid.Column="1" 
         Text="beschikbaar" /> 
     </Grid> 
    </CheckBox> 
+5

+1佈局屬於xaml。這畢竟是WPF,而不是winforms。 – xdumaine 2011-04-07 12:22:37

0

你的意思是你想要Horizontal的方向嗎?

如果是這樣,請嘗試以下操作:

panel.Orientation = Orientation.Horizontal; 

雖然,我怕你實際上可能需要的不只是設置該屬性更多的干預;讓我們來看看。

+0

不需要全部都是水平的,2個文本標籤必須是垂直的 – bubye 2011-04-07 11:29:32

+0

@anony g:好的,那麼你需要在'StackPanel'內有更多的元素來適應這個元素 - 例如'Grid';並以這種方式更精細地展示你的元素。 – 2011-04-07 11:54:57

0
<DockPanel> 
    <CheckBox DockPanel.Dock="Left"/> 

    <StackPanel DockPanel.Dock="Right"> 
     <TextBlock>My Text One</TextBlock> 
     <TextBlock>beschikbaar</TextBlock> 
    </StackPanel> 

    <Image DockPanel.Dock="Left" Source="myImage.png" /> 
    </DockPanel> 

這是一個簡單的方法來達到的效果。從這裏您可以輕鬆調整垂直對齊以滿足您的喜好。您也可以在代碼中輕鬆完成此操作,但我建議您堅持使用基於佈局的任務的XAML。