2011-04-07 138 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。