#c# #wpf #xaml
#c# #wpf #xaml
Вопрос:
Я создал stackpanel в элементе treeviewitem. Я пытаюсь разместить свою картинку рядом с моим флажком и текст рядом с моим графическим полем, но я не знаю, как это сделать. В настоящее время это происходит:
Это мой код:
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
чтобы разместить это — например, aGrid
; и расположите ваши элементы таким образом еще более мелко.
Ответ №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 для задач, основанных на макете.