首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将WPF窗口嵌入到另一个窗口中,并通过XAML或代码调整其大小

如何将WPF窗口嵌入到另一个窗口中,并通过XAML或代码调整其大小
EN

Stack Overflow用户
提问于 2016-03-16 02:12:09
回答 1查看 17.8K关注 0票数 5

首先,这是我使用Xaml的第一天,所以这个问题对你来说可能是假的,但我完全迷路了。

概述

我的技术是,我有MainWindow.xaml,它被分割成三个区域(使用网格列),列的宽度被自动设置。

基于右边列中的一些操作,中间列显示一个页面,比如存在于不同名称空间中的Page.xaml。

我想要的是

问题是,我需要设置这个页面的宽度和高度相等于中间列的宽度和高度,因为它将适合这个区域。

备注

我对xaml和绑定技术的经验非常有限。

MainWindow.Xaml

代码语言:javascript
运行
复制
<Window 
    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" mc:Ignorable="d" 
    WindowState="Maximized"
    ResizeMode="NoResize"
    WindowStartupLocation="CenterScreen"
    Title="MainWindow" d:DesignWidth="1366" d:DesignHeight="768">

<Grid x:Name="MainGrid">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="1.2*" x:Name="LeftColoumn" />
        <ColumnDefinition Width="3*" x:Name="CenterColoumn" />
        <ColumnDefinition Width=".8*" x:Name="RightColoumn" />
    </Grid.ColumnDefinitions>

    <ScrollViewer Grid.Column="2">
        <StackPanel Orientation="Vertical" x:Name="RightStackPanel" Background="LightGray" >
            <Border BorderBrush="{x:Null}" Height="50" >
                <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" TextWrapping="Wrap" FontWeight="SemiBold" FontStyle="Normal" Margin="3" FontSize="20" >Others</TextBlock>
            </Border>
            <Expander x:Name="Expander1" Header="Others" Margin="0,0,10,0">
                <Button  Margin="0,0,0,0"  Width="{Binding ActualWidth, ElementName=RightStackPanel}" Background="White" Content="Add" Height="50" Click="Button_Click" ></Button>
            </Expander>

        </StackPanel>
    </ScrollViewer>

    <Frame  Grid.Column="0" x:Name="LeftFrame" Background="LightGray"  ></Frame>
    <Frame  Grid.Column="1" x:Name="CenterFrame" Background="DarkGray" ></Frame>

</Grid></Window>

其他Xaml文件

代码语言:javascript
运行
复制
<Page
  x:Name="Page"
  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"
  Title="Any" d:DesignWidth="1364" d:DesignHeight="868"
  >

<Grid>
    <Frame   Background="DarkGray" />

</Grid></Page>

MainWindow.xaml.cs

代码语言:javascript
运行
复制
private void Button_Click(object sender, RoutedEventArgs e)
    {
        Frame middleFrame=CenterColumn;
        Otherxaml other=new Otherxaml();
        middleFrame.Source = new Uri("OtherxamlPage.xaml", UriKind.RelativeOrAbsolute);
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-16 04:04:06

与代码片段相关的是,您可以将OtherxamlPage.xaml放在中央框架中,并设置该框架的属性,如下所示:

代码语言:javascript
运行
复制
<Frame  Grid.Column="1" x:Name="CenterFrame" VerticalAlignment="Stretch" VerticalContentAlignment="Center" HorizontalAlignment="Stretch"  HorizontalContentAlignment="Center" Source="OtherxamlPage.xaml" Background="DarkGray" />

您可以在事件处理程序中动态设置Source="OtherxamlPage.xaml“,例如,根据您的示例设置Button.Click

或者,考虑创建WPF UserControl (re:https://msdn.microsoft.com/en-us/library/cc294992.aspx),而不是创建其他XAML窗口(或页面),并将其直接放置到网格单元中。在这两种情况下,都要设置内容“拉伸”属性,以便自动调整其大小,因此不需要在代码中指定它。

希望这能帮上忙。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36025653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档