[英]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.