相关疑难解决方法(0)

X,Y处的WPF中心椭圆

我有一个ItemsControl,它在Canvas上的散点图中绘制了数千个椭圆.我的问题是,如果我将椭圆定位在坐标(4,6)处,高度和宽度为10.椭圆的左上角是(4,6),形状向下和向右延伸.

我想做的是将椭圆中心放在XAML中的特定坐标上,而不必在我的ViewModel层中使用调整.

这是我的图表的工作UserControl:

<Grid>
        <ItemsControl ItemsSource="{Binding State.Data}">

            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <Canvas  ClipToBounds="False"/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>

            <ItemsControl.ItemContainerStyle>
                <Style TargetType="ContentPresenter">
                    <Setter Property="Canvas.Left" Value="{Binding Path=X}" />
                    <Setter Property="Canvas.Top" Value="{Binding Path=Y}" />
                </Style>
            </ItemsControl.ItemContainerStyle>

            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Ellipse Fill="Red"  VerticalAlignment="Center" HorizontalAlignment="Center"  Width="10" Height="20"/>
                </DataTemplate>
            </ItemsControl.ItemTemplate>

        </ItemsControl>
    </Grid>
Run Code Online (Sandbox Code Playgroud)

除了未经验证的椭圆外,这种方法效果很好.有任何想法吗?

wpf

18
推荐指数
3
解决办法
2万
查看次数

在WPF中仅使用XAML将元素定位在"画布"中的中心(而不是左上角)

关于在a中定位元素的常见问题Canvas是"如何定位元素的中心(而不是左上角)".

提出了几种解决方案,但它们都有缺点.

最简单的解决方案是在以编程方式设置Canvas.LeftCanvas.Top属性期间适应元素大小.这有效,但只有一次.此解决方案不支持绑定,并且在元素大小更改时会中断.您也无法设置Canvas.LeftCanvas.Top使用

另一套方案涉及转换的转换利用两种RenderTransformMargin.这些解决方案需要将一些属性绑定到-0.5 * Width-0.5 * Height.这种绑定需要创建自定义ValueConverter,并且不可能仅使用XAML创建.

那么,是否有一种简单的方法可以在画布中定位元素,使其Canvas.LeftCanvas.Top元素的中心对应,并且大小和位置属性都可以绑定到其他属性?

wpf xaml canvas centering

13
推荐指数
1
解决办法
9476
查看次数

WPF:调整圆圈大小,保持中心点而不是TopLeft?

我想借助滑块在画布上调整一个圆圈.这个圆圈可以通过我在代码后面做的一些拖放操作在画布上移动,所以它的位置不固定.

我将滑块的值绑定到椭圆的高度和宽度.不幸的是,当我使用滑块时,圆圈的左上角点(实际上是它所在的矩形的左上角)在操作过程中保持不变.

我希望在操作期间使其中心点保持不变来调整它的大小.在XAML中有一个简单的方法吗?顺便说一下,我已经尝试过ScaleTransform,但它并没有完全按我的意愿行事.

谢谢你!:-)

一月

<Canvas x:Name="MyCanvas">

    <!-- this is needed for some adorner stuff I do in code behind -->
    <AdornerDecorator Canvas.Left="10"
                      Canvas.Top="10">
        <Ellipse x:Name="myEllipse"
             Height="{Binding Path=Value, ElementName=mySlider}"
             Width="{Binding Path=Value, ElementName=mySlider}"
             Stroke="Aquamarine"
             Fill="AliceBlue"
             RenderTransformOrigin="0.5 0.5">
            <Ellipse.RenderTransform>
                <RotateTransform Angle="{Binding Path=Value, ElementName=myRotationSlider}" />
            </Ellipse.RenderTransform>
        </Ellipse>
    </AdornerDecorator>

    <Slider x:Name="mySlider"
            Maximum="100"
            Minimum="0"
            Width="100"
            Value="10"
            Canvas.Left="150"
            Canvas.Top="10" />
    <Slider x:Name="myRotationSlider"
            Maximum="360"
            Minimum="0"
            Width="100"
            Value="0"
            Canvas.Left="150"
            Canvas.Top="50" />
</Canvas>
Run Code Online (Sandbox Code Playgroud)

wpf xaml 2d resize centering

8
推荐指数
1
解决办法
8581
查看次数

WPF元素在Canvas上的定位

我在画布上有一个点,我想放置一个椭圆.我希望椭圆的中心超过这一点.此时,椭圆的左上角最左边是这一点.

我知道我可以在画布上以编程方式移动椭圆,但我想知道是否有办法告诉WPF将元素置于该点的中心而不是从左上角调整它的大小???

.net c# wpf geometry canvas

2
推荐指数
1
解决办法
5819
查看次数

标签 统计

wpf ×4

canvas ×2

centering ×2

xaml ×2

.net ×1

2d ×1

c# ×1

geometry ×1

resize ×1