#wpf #xaml
#wpf #xaml
Вопрос:
Я пытаюсь создать простое приложение со списком задач с помощью WPF / XAML. У меня есть список, в котором отображаются все задачи. Вот мой код:
<Window x:Class="TodoListWPF.Homepage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:TodoListWPF"
mc:Ignorable="d"
Title="Homepage" Height="450" Width="800">
<Grid Margin="10,130,10,10">
<TextBlock HorizontalAlignment="Center" Margin="0,-116,0,0" Text="Welcome to TaskList" FontSize="20" TextWrapping="Wrap" VerticalAlignment="Top" Height="33" Width="180" />
<ListBox Margin="0,-48,0,0" x:Name="TaskListBox">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{Binding Name}"/>
<TextBlock Text="{Binding DueDate}"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</Window>
И кодирование:
public partial class Homepage : Window
{
public Homepage()
{
InitializeComponent();
List<Task> tasks = new List<Task>();
tasks.Add(new Task("Buy RTX 3070", 12, 3, 2021, "Buy a new Asus EK RTX 3070 and install it into the custom loop")); //Test task
TaskListBox.ItemsSource = tasks;
}
}
Я ожидаю простой список из 1 элемента с именем и датой выполнения задачи, но вот мой вывод:
Имя задачи и дата выполнения перекрываются
Как я могу исправить перекрывающиеся элементы?
Ответ №1:
Вы не указали Grid.Row
на своем TextBox
, и в этом случае оба TextBoxes
помещаются в одну и ту же (первую) строку Grid
.
Попробуйте это исправить.
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{Binding Name}"/>
<TextBlock Grid.Row="1" Text="{Binding DueDate}"/>
</Grid>
Если вы хотите иметь Name
и DueDate
в той же строке, вы можете заменить Grid
на StackPanel
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}"/>
<TextBlock Text="{Binding DueDate}"/>
</StackPanel>
</DataTemplate>