Линейный выступ на холсте - PullRequest
0 голосов
/ 19 апреля 2020

Я хотел бы нарисовать линию на холсте в своем приложении WPF. Моя проблема, если я добавлю координаты линии, которые находятся на холсте, я также смогу увидеть эту часть линии.

Я прикрепил изображение .:

enter image description here

Желтая коробка - это моя область холста.

<Window x:Name="MainWindow01" x:Class="_001Linewpf.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:_001Linewpf"
    mc:Ignorable="d"
    Title="Scaleit" Height="874" Width="1024" Loaded="MainWindow01_Loaded">
<Grid ShowGridLines="True">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="80"></ColumnDefinition>
        <ColumnDefinition Width="*"></ColumnDefinition>
        <ColumnDefinition Width="250"></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="80"></RowDefinition>
        <RowDefinition Height="*"></RowDefinition>
        <RowDefinition Height="80"></RowDefinition>
    </Grid.RowDefinitions>
    <Grid Grid.Row="0" Grid.ColumnSpan="3" HorizontalAlignment="Center" VerticalAlignment="Center"></Grid>
    <Grid Grid.Row="1" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center"></Grid>
    <Grid Name="drawgrid" Background="Yellow" Grid.Row="1" Grid.Column="1">
        <Border x:Name="CanvasBorder" BorderThickness="5" BorderBrush="Black">
            <Canvas x:Name="Canvas01">
                <Canvas.Background>
                    <SolidColorBrush Color="Black" Opacity="0.15"/>
                </Canvas.Background>
            </Canvas>
        </Border>
    </Grid>

    <Grid Grid.Row="1" Grid.Column="2" HorizontalAlignment="Center" VerticalAlignment="Center"></Grid>
    <Grid Grid.Row="2" Grid.ColumnSpan="3" HorizontalAlignment="Center" VerticalAlignment="Center"></Grid>
    <Label x:Name="Label01" Content="Label" Grid.Column="2" HorizontalAlignment="Left" Margin="152,49,0,0" Grid.Row="1" VerticalAlignment="Top"/>
    <Label x:Name="Label02" Content="Label" Grid.Column="2" HorizontalAlignment="Left" Margin="152,139,0,0" Grid.Row="1" VerticalAlignment="Top"/>
</Grid>

и вот мой c#

    private void MainWindow01_Loaded(object sender, RoutedEventArgs e)
    {
        Line myLine = new Line();

        myLine.Stroke = System.Windows.Media.Brushes.Black;

        myLine.X1 = 100;
        myLine.X2 = 600;  // 150 too far
        myLine.Y1 = 100;
        myLine.Y2 = -200;

        myLine.StrokeThickness = 1;

        Canvas01.Children.Add(myLine);

        //Label01.Content = "x: " + drawgrid.Point;
        //Label02.Content = "y: " + drawgrid.Height.ToString();
    }
}

}

Я бы хотел нарисовать только область холста. Как программа CAD. Другой частью формы будут кнопки и т. Д.

1 Ответ

0 голосов
/ 19 апреля 2020

Вы можете установить ClipToBounds в true:

<Canvas x:Name="Canvas01" ClipToBounds="True">
    <Canvas.Background>
        <SolidColorBrush Color="Black" Opacity="0.15"/>
    </Canvas.Background>
</Canvas>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...