Как сделать так, чтобы пользовательский элемент управления помещался в сетке окна? - PullRequest
0 голосов
/ 05 декабря 2018

Я работаю над проектом.И у меня возникли некоторые проблемы с пользовательским контролем WPF.

Я добавил пользовательский элемент управления в окно и хочу поместить его в определенную сетку.Но пользовательский контроль не может соответствовать Gird, он находится за пределами Grid.Это выглядит так: Пользовательский элемент управления в окне

Вот мой пользовательский элемент управления (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>

Пользовательский элемент управления


А это моё окно

 <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>

Окно выглядит так: введите описание изображения здесь

Я будубудь так благодарен, если кто-нибудь может помочь мне решить эту проблему!Спасибо!

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Что ж, благодаря @FelixCastor, проблема решена.Пользовательский элемент управления должен быть переписан следующим образом:

            <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>

И в окне мы также можем немного изменить это так:

        <Viewbox>
            <local:TestGate Grid.Row="0" Grid.Column="0"></local:TestGate>
        </Viewbox>

Это выглядит так: Результат И проблема решена.

0 голосов
/ 05 декабря 2018

Поскольку я не до конца понял вашу проблему, я не даю решения (и вижу, что другие уже пытались помочь в комментариях, насколько это возможно), но я бы посоветовал вам сделать код «проще» на будущее.Это всего лишь советы, поскольку я делал те же «ошибки», когда начинал с 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>
...