簡體   English   中英

矩形未繪制

[英]Rectangle is not being drawn

我試圖在WPF中制作繪圖程序,但遇到一些問題。 我可以成功地繪制線條(yeeey),但我也希望能夠填充空間(我的方法是以相同的起點堆疊大量的recntagles)。 但是,當我將單選按鈕從“行”切換為“填充”時,它不會繪制任何內容。

-圖形(布爾值)用於創建填充的起點

private void cnvs_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.LeftButton == MouseButtonState.Pressed && linemode.IsChecked == true)
        {
            Line line = new Line();
            drawing = true;
            line.Stroke = currentbrush;
            line.X1 = currentPoint.X - 9;
            line.Y1 = currentPoint.Y - 9;
            line.X2 = e.GetPosition(this).X - 9;
            line.Y2 = e.GetPosition(this).Y - 9;
            currentPoint = e.GetPosition(this);
            cnvs.Children.Add(line);
        } else if (cnvs.IsFocused == true)
        {
            if (!drawing) rectbeggining = e.GetPosition(this);
            drawing = true;
            Rectangle rect = new Rectangle();
            rect.Stroke = currentbrush;
            rect.StrokeThickness = 1;
            rect.Height = (Math.Abs(e.GetPosition(this).Y) - Math.Abs(rectbeggining.Y));
            rect.Width = (rectbeggining.X - e.GetPosition(this).X);
            Canvas.SetLeft(rect, e.GetPosition(this).X);
            Canvas.SetTop(rect, Math.Abs(e.GetPosition(this).Y));
            cnvs.Children.Add(rect);
        }
        if(e.LeftButton == MouseButtonState.Released) drawing = false;
    }    

Xaml

<Grid>    
    <Border Name="CanvasBorder" BorderBrush="Black" BorderThickness="2" Margin="8,8,207,9"/>    
    <Canvas HorizontalAlignment="Left" Height="972" Margin="10,10,0,0" VerticalAlignment="Top" Width="1493" MouseDown="Canvas_MouseDown" MouseMove="cnvs_MouseMove" Name="cnvs">    
        <Canvas.Background>    
            <SolidColorBrush Color="White" Opacity="0"/>    
        </Canvas.Background>    
    </Canvas>    
    <ComboBox Name="selectcolor" Margin="1510,10,10,945" SelectedItem="Black" SelectionChanged="selectcolor_SelectionChanged" SelectedIndex="7">    
        <ComboBox.ItemTemplate>    
            <DataTemplate>    
                <StackPanel Orientation="Horizontal">    
                    <Rectangle Fill="{Binding Name}" Width="16" Height="16" Margin="0,2,5,2" />    
                    <TextBlock Text="{Binding Name}" />    
                </StackPanel>    
            </DataTemplate>    
        </ComboBox.ItemTemplate>    
    </ComboBox>    
    <Button Content="Reset" HorizontalAlignment="Left" Margin="1510,939,0,0" VerticalAlignment="Top" Width="192" Click="Button_Click" Height="44"/>
    <RadioButton GroupName="selectedMode" Name="linemode" Content="Line" HorizontalAlignment="Left" Margin="1510,232,0,0" VerticalAlignment="Top" IsChecked="True"/>    
    <RadioButton GroupName="selectedMode" Name="fillmode" Content="Fill" HorizontalAlignment="Left" Margin="1510,247,0,0" VerticalAlignment="Top"/>
    <Label Content="Mode:" HorizontalAlignment="Left" Margin="1510,206,0,0" VerticalAlignment="Top"/>    
</Grid>    

目前,我正在為Generalstaff進行地圖編輯。 您可以在線型或面型的地形之間進行選擇,繪制,並在完成筆觸后對其進行處理。 除非我誤解了您的目的,否則聽起來很像您在做。

我基本上在畫布上有一個畫布。 比這復雜得多。 我將視圖模型綁定到一個具有畫布的items控件,因為itemspresenter和模板數據都位於畫布中。

我可以無聊地玩這些東西。

我使用墨水畫布是因為與直接在畫布上繪制相比,它可以為您提供更平滑的結果。 我開始使用像這樣的畫布,但是您會有點亂。

strokeschanged事件用於指示何時完成畫布上的筆划。 每個筆划都有一個styluspointcollection StylusPoints,您可以遍歷該筆觸以獲得這些點。

一旦有了點,就可以構建多邊形。 我通過模板來實現,並將多邊形的Points屬性綁定到視圖模型中的Pointcollection。 多邊形具有Fill屬性,您可以設置或綁定到solidcolorbrush。 這樣,您可以繪制任何喜歡的形狀,然后用一種顏色填充它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM