Всплывающее окно, отображающее черный ящик вместо ожидаемого результата

#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 полями (Имя, Сумма, Примечания), но все, что я получаю, — это черное поле и фрагмент текстовых полей, а также кнопка «Отправить».

Черное поле с половиной текстового поля и кнопкой quot;Отправитьquot;.

Я всерьез начал заниматься C# всего 2 дня назад и понятия не имею, что пошло не так. Кто-нибудь может это объяснить, пожалуйста?

Всплывающее окно с цветом сетки, установленным на aqua:

Установите цвет сетки на Аквамариновый и добавьте новое определение строки

Текстовое поле заметок было заблокировано: добавлено новое <RowDefinition Height="Auto" /> , и это, казалось, исправило его, хотя оно все еще разрезано пополам.

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

1. Хм, выглядит немного странно. Попробуйте явно задать цвет фона всплывающего окна, сетки или элементов управления, возможно, посмотрите, что произойдет

2. @Общее Да, черный цвет изменился на указанный цвет, но он по-прежнему разрезан пополам, а кнопка «Отправить» блокирует notes поле. Я отредактирую сообщение, чтобы показать скриншот.

3. Я подозреваю, что проблема с черным фоном связана с отсутствием фона и проблемами с прозрачностью. Я также подозреваю, что у вас возникли проблемы с размером из — за отсутствия фиксированной ширины или высоты в вашей сетке, поэтому по умолчанию используется минимальное возможное пространство — что должно быть нормально, но всплывающие окна привередливы-возможно, поиграйте с заполнением или дайте сетке поле или минимальную ширину. На другом примечании: вероятно, дайте всплывающему окну кнопку переключения в качестве цели размещения и укажите, что оно должно начинаться под ним, чтобы оно правильно перемещалось вместе с окном.

Ответ №1:

Прозрачность Popup ( Popup точнее, дочернего хоста) по умолчанию отключена, поэтому содержимое Popup отображается на черном фоне.

Вы должны явно разрешить прозрачность для свойства Popup , установив Popup.AllowsTransparency значение true:

 <Popup AllowsTransparency="True" />