Макет стековой панели C # WPF

#c# #wpf #xaml

#c# #wpf #xaml

Вопрос:

Я создал stackpanel в элементе treeviewitem. Я пытаюсь разместить свою картинку рядом с моим флажком и текст рядом с моим графическим полем, но я не знаю, как это сделать. В настоящее время это происходит:

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.

Но я хочу, чтобы две текстовые метки справа были вертикальными, одна под другой.

Как мне это сделать?

Комментарии:

1. Почему вы делаете это таким образом? Разве это не было бы намного проще в использовании ItemTemplate ?

2. Действительно. Используйте команду поместить xaml из моего ответа в DataTemplate и присвоить его свойству ItemTemplate в Treeview (не забудьте использовать {Binding } вместо жестко закодированных значений)

Ответ №1:

Я бы сделал следующий 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>
  

Комментарии:

1. 1 макет принадлежит xaml. В конце концов, это WPF, а не winforms.

Ответ №2:

Вы просто имеете в виду, что вам нужна Horizontal ориентация?

Если это так, попробуйте следующее:

 panel.Orientation = Orientation.Horizontal;
  

Хотя, я боюсь, что на самом деле вам может потребоваться большее вмешательство, чем просто настройка этого свойства; давайте посмотрим.

Комментарии:

1. нет, не все должно быть горизонтальным, 2 текстовые метки должны быть вертикальными

2. @anony g: Хорошо, тогда вам понадобится больше элементов в вашем, StackPanel чтобы разместить это — например, a Grid ; и расположите ваши элементы таким образом еще более мелко.

Ответ №3:

   <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 для задач, основанных на макете.