#c# #wpf
Вопрос:
У меня есть следующий код для всплывающей формы:
<Window x:Class="PoolBet.MainWindow"
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:PoolBet"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<ToggleButton x:Name="TogglePopupButton" Height="30" Width="150" HorizontalAlignment="Left">
<StackPanel>
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Center">
<Run Text="Is button toggled? " />
<Run Text="{Binding IsChecked, ElementName=TogglePopupButton}" />
</TextBlock>
<Popup Name="myPopup" IsOpen="{Binding IsChecked, ElementName=TogglePopupButton}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<!-- Added after TheGeneral's comment -->
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Label Margin="0,10,0,0">Name:</Label>
<TextBox Grid.Column="1" Margin="0,10,0,10" x:Name="nameInput" />
<Label Grid.Row="1">Amount:</Label>
<TextBox Grid.Row="1" Grid.Column="1" Margin="0,0,0,10" x:Name="amountInput" />
<Label Grid.Row="2">Notes:</Label>
<TextBox Grid.Row="2" Grid.Column="1" AcceptsReturn="True" x:Name="notesInput" />
<Button Click="submit" Grid.Row="3" Grid.Column="1" Content="Submit"/>
</Grid>
</Popup>
</StackPanel>
</ToggleButton>
<ItemsControl Name="icTodoList" Grid.Row="5" Grid.Column="1">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Margin="0,0,0,5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<RadioButton Content="{Binding Choice}"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<ListView Margin="10" Name="lvUsers" Grid.Column="2" >
<ListView.View>
<GridView>
<GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding Name}" />
<GridViewColumn Header="Amount" Width="70" DisplayMemberBinding="{Binding Amount}" />
<GridViewColumn Header="Notes" Width="150" DisplayMemberBinding="{Binding Notes}" />
</GridView>
</ListView.View>
</ListView>
</Grid>
</Window>
(Это мой код, хотя я не уверен, что это имеет значение)
namespace PoolBet
{
public partial class MainWindow : Window
{
public ObservableCollection<User> Users { get; set; } = new ObservableCollection<User>();
public ObservableCollection<Choice> Choices { get; set; } = new ObservableCollection<Choice>();
public MainWindow()
{
InitializeComponent();
lvUsers.ItemsSource = Users;
}
private void submit(object sender, RoutedEventArgs e)
{
Users.Add(new User() { Name = nameInput.Text, Amount = Convert.ToInt32(amountInput.Text), Notes = notesInput.Text });
}
public class User
{
public string Name { get; set; }
public int Amount { get; set; }
public string Notes { get; set; }
}
public class Choice
{
public string ChoiceName { get; set; }
public ObservableCollection<User> Users { get; set; }
}
}
}
Я хочу, чтобы на нем была форма с 3 полями (Имя, Сумма, Примечания), но все, что я получаю, — это черное поле и фрагмент текстовых полей, а также кнопка «Отправить».
Я всерьез начал заниматься C# всего 2 дня назад и понятия не имею, что пошло не так. Кто-нибудь может это объяснить, пожалуйста?
Всплывающее окно с цветом сетки, установленным на aqua:
Текстовое поле заметок было заблокировано: добавлено новое <RowDefinition Height="Auto" />
, и это, казалось, исправило его, хотя оно все еще разрезано пополам.
Комментарии:
1. Хм, выглядит немного странно. Попробуйте явно задать цвет фона всплывающего окна, сетки или элементов управления, возможно, посмотрите, что произойдет
2. @Общее Да, черный цвет изменился на указанный цвет, но он по-прежнему разрезан пополам, а кнопка «Отправить» блокирует
notes
поле. Я отредактирую сообщение, чтобы показать скриншот.3. Я подозреваю, что проблема с черным фоном связана с отсутствием фона и проблемами с прозрачностью. Я также подозреваю, что у вас возникли проблемы с размером из — за отсутствия фиксированной ширины или высоты в вашей сетке, поэтому по умолчанию используется минимальное возможное пространство — что должно быть нормально, но всплывающие окна привередливы-возможно, поиграйте с заполнением или дайте сетке поле или минимальную ширину. На другом примечании: вероятно, дайте всплывающему окну кнопку переключения в качестве цели размещения и укажите, что оно должно начинаться под ним, чтобы оно правильно перемещалось вместе с окном.
Ответ №1:
Прозрачность Popup
( Popup
точнее, дочернего хоста) по умолчанию отключена, поэтому содержимое Popup
отображается на черном фоне.
Вы должны явно разрешить прозрачность для свойства Popup
, установив Popup.AllowsTransparency
значение true:
<Popup AllowsTransparency="True" />