XAML 我有一个主窗口有两个内容控制,我想显示一个单一的用户控制在两个

hrysbysz  于 2023-09-28  发布在  其他
关注(0)|答案(1)|浏览(85)

我试图在WPF中创建一个小的TicTacToe应用程序来练习编码。我在Xaml中创建了一个主窗口,其中两个ContentControl一个挨着另一个,我想在用户玩游戏时显示主窗口中的游戏和侧边的记分牌(它们是同一网格的两个相邻列),这些将由2个不同的UserControl处理,这就是为什么两个ContentControl
我的登录屏幕是单窗口的,当我加载它的用户控件时,它只覆盖了我加载它的ContentControl,这留下了一个可怕的白色条带。我可以通过添加一个新的用户控件来创建一个补丁,以便在空的内容控件中加载,但我希望登录屏幕可以扩展到两个控件,因为它看起来会更好,我这样做是为了学习。
有没有办法在两个用户控件之间加载一个用户控件,或者拉伸它来覆盖空的控件?
主窗口的Xaml为:

<Window x:Class="TicTacToe_Main_form.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:TicTacToe_Main_form"
    mc:Ignorable="d"
    Title="Tic-Tac-Toe" Height="450" Width="600"
    ResizeMode="NoResize">
<Grid>
    
    <!--Main page divided in 2 parts to have game on the left and score on the right-->
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="2*" />
        <ColumnDefinition Width="1*" />
    </Grid.ColumnDefinitions >
    
    
    <ContentControl x:Name="ActionWindow" Grid.Column="0" />
    <ContentControl x:Name="SideWindow" Grid.Column="1" />
    

</Grid>

XAML背后的代码是

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        ActionWindow.Content = new StartNewGame();
    }
}

提前感谢,如果你对如何改进我提问的方式有任何建议,我很乐意“倾听”

lf3rwulv

lf3rwulv1#

有几个变体,但你不使用MVVM,这就是为什么我给你一个变体,但它不是很优雅。
实际上,我们创建另一个ContentControl并在两个列上拉伸它,示例化这个ContentControl的内容,我们只处理可见性。

<Grid>
    <!--Main page divided in 2 parts to have game on the left and score on the right-->
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="2*" />
        <ColumnDefinition Width="1*" />
    </Grid.ColumnDefinitions>
    <ContentControl Panel.ZIndex="1"
                    Grid.ColumnSpan="2"
                    x:Name="Logging" />
    <ContentControl x:Name="ActionWindow"
                    Grid.Column="0" />
    <ContentControl x:Name="SideWindow"
                    Grid.Column="1" />
</Grid>

下面我们做示例化,然后我们有两个可见性状态。

public MainWindow()
    {
        InitializeComponent();

        ActionWindow.Content = new StartNewGame();
        // 
        Logging.Content = new Class();
        Logging.Visibility = Visibility.Collapsed;
        Logging.Visibility = Visibility.Visible;
    }

相关问题