如何在父画布中定位 UserControl

R.D*_*R.D 1 wpf user-controls wpf-positioning

我想将此 UserControl 放置在 Canvas.Left="168"、Canvas.Top="213" 处。

但是,控件出现在角落。我应该怎么办?

如果我将这些值放在此类的使用点,这些值将返回为 NaN 在这种情况下,我怎样才能获得正确的左值和上值?

用法:

<Canvas x:Name="DesignerCanvas"
        ClipToBounds="True"
        SnapsToDevicePixels="True">
<Gr:BareNode />
</Canvas>
Run Code Online (Sandbox Code Playgroud)

用户控制:

<UserControl x:Class="DiagramDesigner.BareNode"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<Grid>
    <ContentControl Width="50"
                  Height="50"
                  Padding="2"    
                  Canvas.Left="168" Canvas.Top="213">
        <Ellipse IsHitTestVisible="False" >
            <Shape.Fill>
                <RadialGradientBrush Center="0.2, 0.2" GradientOrigin="0.2, 0.2" RadiusX="0.8" RadiusY="0.8">
                    <GradientStop Color="LightBlue" Offset="0"/>
                    <GradientStop Color="Blue" Offset="0.9"/>
                </RadialGradientBrush>
            </Shape.Fill>
        </Ellipse>
    </ContentControl>
   </Grid>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

Mik*_*Two 5

我不确定您是否尝试过此操作,但仅从 XAML 来看,您似乎正在尝试在用户控件内设置用户控件的位置。那是行不通的。您需要将其放在使用用户控件的地方

<Canvas x:Name="DesignerCanvas"
    ClipToBounds="True"
    SnapsToDevicePixels="True">
   <Gr:BareNode Canvas.Left="168" Canvas.Top="213"/>
</Canvas>
Run Code Online (Sandbox Code Playgroud)

从用户控件内部的 ContentControl 声明中取出 Canvas.Left="168" Canvas.Top="213" 部分。