6

InkCanvasWPF パスを追加し、選択を使用して WPF パスを選択したいと考えています。だから、私はこのコードを使用します。

System.Windows.Shapes.Path path = drawCanvas.Children[i] as System.Windows.Shapes.Path;    
drawCanvas.Children.RemoveAt(i);
inkCanvas.Children.Add(path);

これが出力です。0,0 から開始する ためActualwidth、0,0 から WPF パスを選択する必要があります。ActualHeight

代替テキスト

絶対 WPF パスを選択するにはどうすればよいですか?

ありがとう

編集:

これで、このコードを使用して絶対に選択できます。

System.Windows.Shapes.Path path = drawCanvas.Children[i] as System.Windows.Shapes.Path;
drawCanvas.Children.RemoveAt(i);
path.Margin = new Thickness(-getMinX(path), -getMinY(path), 0, 0);
containPath.Children.Add(path);
containPath.Width = getMaxX(path) - getMinX(path);
containPath.Height = getMaxY(path) - getMinY(path);
containPath.Margin = new Thickness(getMinX(path), getMinY(path), 0, 0);
inkCanvas.Children.Add(containPath);
4

2 に答える 2

4

でUIElement.UpdateLayout メソッドを使用して、 FrameworkElement.ActualWidth プロパティInkCanvasを更新できます。これが必要な理由の背景情報については、リンクを参照してください。ActualHeightActualWidth

編集:

私は質問を誤解しました。それはそうではなく、ActualWidthゼロActualHeightでしたが、それらの値は に対して相対的でし(0, 0)InkCanvas。この問題に対するかなり良い解決策は、 を でラップし、Path次のようCanvasに配置することです。Margin

<Canvas Width="50" Height="50" Margin="200,200,0,0">
    <Line
        X1="0" Y1="0"
        X2="50" Y2="50"
        Stroke="Black"
        StrokeThickness="4" />
</Canvas>

次のように動作します。

代替テキスト

このアプローチの欠点は、ユーザーがCanvas任意の形状ではなく、長方形であるなげなわをしなければならないことです。それでも、オブジェクトと原点をなげなわにするよりははるかに優れています。

于 2011-01-05T05:04:08.997 に答える
0

コントロールポイントを介してのみ定義できる要素(たとえば、長方形、楕円などに対して線、パスなど)をアイテムコントロールに追加する場合(InkCanvas選択をサポートしているため、そうであると想定しています)、最初にキャンバスがに追加されます0,0 のパネル。キャンバスの幅と幅Heightは、コントロール ポイントの最大 X 座標と Y 座標から決定されます。この後、要素はこのキャンバスの子として追加されます。

また、要素でこの種の動作が見られる場合は常に、要素が水平/垂直配置などのレイアウト プロパティをサポートしていないことがわかります。

ActualWidthこれを回避する唯一の方法は、パス内の座標からと をActualHeight手動で見つけることです。

編集:これは個人的な経験によるものであり、ドキュメントからのものではありません。

于 2011-01-05T05:44:11.770 に答える