C# 当我将网格控件交换为stackpanel时,内容将消失

C# 当我将网格控件交换为stackpanel时,内容将消失,c#,wpf,mvvm,grid,stackpanel,C#,Wpf,Mvvm,Grid,Stackpanel,当我将网格控件交换为stackpanel控件时,其中的内容将消失。我可以只使用网格控件,但不知道bug是什么:) 这很有效 <Grid> <views:ChessBoardView DataContext="{Binding Path=BoardViewModel}" ></views:ChessBoardView> </Grid> 穷人的依赖注入: public partial class App : Application { pro

当我将网格控件交换为stackpanel控件时,其中的内容将消失。我可以只使用网格控件,但不知道bug是什么:)

这很有效

<Grid> <views:ChessBoardView DataContext="{Binding Path=BoardViewModel}" ></views:ChessBoardView>
</Grid>
穷人的依赖注入:

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        MainWindow = new Chess_Piece_Viewer.Views.MainWindow();
        var MainViewModel = new Chess_Piece_Viewer.ViewModels.MainWindowViewModel();
        MainViewModel.BoardViewModel = new ViewModels.ChessBoardViewModel();
        MainWindow.DataContext = MainViewModel;
        MainWindow.Show();

    }
}
我添加了正在消失的用户控件

<UserControl x:Class="Chess_Piece_Viewer.Views.ChessBoardView"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>

</UserControl.Resources>
<UniformGrid Rows="8" Columns="8">
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
       </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=DarkSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Stroke="Black">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Path=LightSquareColor}"/>
        </Rectangle.Fill>
    </Rectangle>



</UniformGrid>
</UserControl>


提前感谢您的帮助:)

我推荐两件事:

首先,在代码中使用一些循环来生成所有矩形。其中大约有64个是硬编码的。代码隐藏确实可以减少XAML文件的大小

XAML:

以下内容仅在设计视图中设置高度和宽度,而在代码运行时不设置高度和宽度:

d:DesignHeight="300" d:DesignWidth="300"
生成的XAML应该如下所示:

<UserControl x:Class="Chess_Piece_Viewer.Views.ChessBoardView"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         Height="300" Width="300"
         d:DesignHeight="300" d:DesignWidth="300">


什么是
视图:棋盘视图
?在
网格中
它将占据整个高度,在
堆叠面板中
它将达到所需的高度。另外,将
DataContext
绑定到
DataContext
是一个坏主意,它会导致递归,最终由于绑定错误而停止。作为对Schertler的回复,我将检查如何调整堆栈面板高度:)您不需要调整
stackpanel
的高度,但是它的内容的高度。仅仅使stackpanel比内容更大、更宽似乎并没有显示内容。
 <UniformGrid x:Name="_uniformGrid" Rows="8" Columns="8"/>
private void InitializeUniformGrid()
{
    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            _uniformGrid.Children.Add(new Rectangle { Fill = Brushes.Black, Stroke = Brushes.Black });
            _uniformGrid.Children.Add(new Rectangle { Fill = Brushes.White, Stroke = Brushes.Black });
        }
        for (int k = 0; k < 4; k++)
        {
            _uniformGrid.Children.Add(new Rectangle { Fill = Brushes.White, Stroke = Brushes.Black });
            _uniformGrid.Children.Add(new Rectangle { Fill = Brushes.Black, Stroke = Brushes.Black });
        }
    }
}
Height="500" Width="500"
d:DesignHeight="300" d:DesignWidth="300"
<UserControl x:Class="Chess_Piece_Viewer.Views.ChessBoardView"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         Height="300" Width="300"
         d:DesignHeight="300" d:DesignWidth="300">