2017-03-22 15 views
0

私は、WPFウィンドウのキャンバスにベジエパスをプログラムで追加しようとしています。これは私がXAMLでそれらを書き出す場合は正常に動作しますが、黒い長方形が正しく追加されているので、それは建物で何かでなければならないものを追加すると、プログラム追加されたベジェがキャンバスにレンダリングされないのはなぜですか?

private void Window_ContentRendered(object sender, EventArgs e) 
    { 
     var r = new Rectangle(); 

     r.Width = 50; 
     r.Height = 50; 
     r.StrokeThickness = 3; 
     r.Fill = new SolidColorBrush(Colors.Black); 

     canvas.Children.Add(r); 

     //bezier is a System.Windows.Shapes.Path 
     bezier.Stroke = new SolidColorBrush(Colors.Black); 
     bezier.StrokeThickness = 35; 

     PathFigure pf = new PathFigure { StartPoint = new Point(50, 67.5) }; 
     PolyBezierSegment pbs = new PolyBezierSegment(new Point[] { new Point(100, 67.5), new Point(100, 50), new Point(150, 50) }, false); 
     pf.Segments.Add(pbs); 

     PathFigureCollection pfc = new PathFigureCollection { pf }; 

     PathGeometry pg = new PathGeometry(); 
     pg.Figures = pfc; 

     bezier.Data = pg; 

     canvas.Children.Add(bezier); 

     canvas.Dispatcher.Invoke(() => { }, DispatcherPriority.Render); 
    } 

後ろ

XAML

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="320" Width="480" ContentRendered="Window_ContentRendered"> 

    <Canvas Margin="10" Name="canvas"> 
     <Rectangle Width="50" Height="100" Fill="LightSalmon" Margin="0,50"></Rectangle> 
    </Canvas> 
</Window> 

コードを失敗しますベジェパスを上げると、どこに問題があるのか​​分かりません。エラーや例外はありません。再レンダリングでは表示されません。ここでは完全を期すために

<Path Stroke="Black" StrokeThickness="30" Name="blackPath"> 
     <Path.Data> 
      <PathGeometry> 
       <PathFigureCollection> 
        <PathFigure StartPoint="50,67.5"> 
         <PolyBezierSegment Points="100,67.5 100,50 150,50" /> 
        </PathFigure> 
       </PathFigureCollection> 
      </PathGeometry> 
     </Path.Data> 
    </Path> 

答えて

1

問題が

PolyBezierSegment pbs = new PolyBezierSegment(
    new Point[] { new Point(100, 67.5), 
    new Point(100, 50), 
    new Point(150, 50) }, 
    false); // <== Wrong 

PolyBezierSegment pbs = new PolyBezierSegment(
    new Point[] { new Point(100, 67.5), 
    new Point(100, 50), 
    new Point(150, 50) }, 
    true); // <== Set to true if the Stroke is defined separately, which is the case for me 
あるべき解決働くベジエの(現在はコメントアウト)XAML、
関連する問題