如何使用户控件适合窗口的网格?

时间:2018-12-05 13:40:56

标签: c# wpf user-controls grid

我正在研究一个项目。而且我遇到了WPF用户控件的一些问题。

我已经在窗口中添加了一个用户控件,我想将其放在特定的网格中。但是用户控件不能容纳网格,它在网格外部。看起来像这样: User Control in Window

这是我的用户控件(TestGate)

<UserControl x:Class="MA.TestGate"
         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" 
         xmlns:local="clr-namespace:MA"
         mc:Ignorable="d" Height="auto" Width="auto">
<Grid >

    <Canvas Name="GateCanvas" Width="Auto" Height="Auto" >
        <Rectangle Name="Base" Fill="White" Height="300" Canvas.Left="0" Stroke="Black" StrokeThickness="1" Canvas.Top="0" Width="300"/>
        <Polygon Name="Input_1" Points="0,25 86,75 0,125" Stroke="Black" Fill="White"></Polygon>
        <Polygon Name="Input_2" Points="0,175 86,225 0,275" Stroke="Black" Fill="White"></Polygon>
        <Polygon Name="Output" Points="275,125 275,175 300,175 300,125" Stroke="black" Fill="White"></Polygon>
    </Canvas>

</Grid>

User Control


这是我的窗户

 <Window x:Class="MA.GATEWINDOW"
    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:myControls ="wpf"
    xmlns:local="clr-namespace:MA"        
    mc:Ignorable="d"        
    Title="GATEWINDOW" Height="720" Width="1280" Name="TheAndGate">

<Grid ShowGridLines="True">
    <Grid.RowDefinitions>
        <RowDefinition></RowDefinition>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition>
        </ColumnDefinition>
        <ColumnDefinition Width="1100"></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <Grid Grid.Row="0" Grid.Column="0" Name="Gate" ShowGridLines="True">
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions></Grid.ColumnDefinitions>
        <local:TestGate Grid.Row="0" Grid.Column="0" ></local:TestGate>

窗口是这样的:enter image description here

如果有人可以帮助我解决这个问题,我将非常感激!谢谢!

2 个答案:

答案 0 :(得分:1)

好吧,感谢@FelixCastor,问题已解决。 用户控件应该这样重写

androidx.drawerlayout.widget.DrawerLayout

在窗口中,我们还可以进行如下更改:

            <Viewbox Height="auto" Width="auto">
            <Canvas Height="300" Width=" 300">
                <Rectangle Name="Base" Fill="White" Height="300" Canvas.Left="0" Stroke="Black" StrokeThickness="1" Canvas.Top="0" Width="300"/>
                <Polygon Name="Input_1" Points="0,25 86,75 0,125" Stroke="Black" Fill="White"></Polygon>
                <Polygon Name="Input_2" Points="0,175 86,225 0,275" Stroke="Black" Fill="White"></Polygon>
                <Polygon Name="Output" Points="275,125 275,175 300,175 300,125" Stroke="black" Fill="White"></Polygon>
            </Canvas>
            </Viewbox>

它看起来像这样: Result 问题解决了。

答案 1 :(得分:0)

由于我不完全了解您的问题,所以我没有给出解决方案(并且我看到其他人已经在尝试中提供尽可能多的注释),但是我建议您使代码“更容易”以备将来使用。这些只是建议,因为我在使用WPF时曾经做过同样的“错误”,但只需很少的更改就可以更容易阅读:

<Grid.ColumnDefinitions></Grid.ColumnDefinitions> 

完全没用(空)

<Grid.RowDefinitions>
   <RowDefinition></RowDefinition>
</Grid.RowDefinitions>

几乎没有用,因为只有一列(但实际上,如果您认为将来可以扩展它,可以保留它)。

<RowDefinition></RowDefinition>

可以重写<RowDefinition/>

Grid.Row="0" Grid.Column="0"

不必要的信息,如果为“ 0”,则可以将其删除

您的代码将变为:

<Grid ShowGridLines="True">
    <Grid.RowDefinitions>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="1100"/>
    </Grid.ColumnDefinitions>
    <Grid Name="Gate" ShowGridLines="True">
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <local:TestGate Grid.Row="0" Grid.Column="0" ></local:TestGate>