标签: wpf-positioning

在wpf中获取窗口中元素的绝对位置

我想在双击时获得与窗口/根元素相关的元素的绝对位置.元素在它的父元素中的相对位置是我可以看到的,而我想要达到的是相对于窗口的点.我已经看到了如何在屏幕上获取元素点的解决方案,但不是在窗口中.

wpf wpf-positioning

81
推荐指数
4
解决办法
11万
查看次数

更改WPF窗口的启动位置

我想在屏幕的右上角打开一个WPF窗口.

现在我可以通过打开窗口然后移动它来实现(通过user32.dll中的movewindow).但是,这种方法意味着窗口在其默认位置打开,完全加载,然后移动到右上角.

我怎么能改变它以便我可以指定窗口的初始位置和大小?

wpf window wpf-positioning

43
推荐指数
3
解决办法
7万
查看次数

如何在wpf画布中居中元素

如何使用附加属性将元素置于wpf画布中心?

wpf canvas wpf-positioning

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

如何获取WPF弹出窗口的ActualWidth

我试图将一个Popup元素放在相对于Placement控件的特定位置.

为了实现这一点,我需要找出ActualWidth弹出控件.但是在显示弹出窗口之前或之后尝试获取此值(IsOpen = True)它总是返回0.

不幸的是,我不能硬编码弹出窗口的大小.

我怎样才能确定ActualWidth

wpf popup actualwidth wpf-positioning

12
推荐指数
1
解决办法
1513
查看次数

在画布上定位UIElement

我有一个画布和一个红色矩形. Rectangle有一个MouseDown事件处理程序实现:

private void RedRectangle_MouseDown(object sender, MouseButtonEventArgs e)
{
    CreateMyBorder();
}
Run Code Online (Sandbox Code Playgroud)

CreateMyBorder方法应该创建一个Border与画布上的矩形具有相同大小和位置的UIElement ,即它应该覆盖红色矩形.

复制WidthHeight红色矩形的属性和设置它们的Border元件是容易的:

myBorder.Height = RedRectangle.Height;
myBorder.Width = RedRectangle.Width;
Run Code Online (Sandbox Code Playgroud)

但是,经过2个小时的试错后,我无法在画布上复制红色矩形的位置!预期的:

double x = RedRectangle.GetValue(Canvas.Left);
double y = RedRectangle.GetValue(Canvas.Top);
myBorder.SetValue(Canvas.Left, x);
myBorder.SetValue(Canvas.Top, y);
Run Code Online (Sandbox Code Playgroud)

不起作用xy变量值NaN.为什么?

请帮助,我无法相信,UIElement在面板上获得和设置位置这样的微不足道的事情可能会非常恼人.谢谢.

wpf canvas wpf-controls uielement wpf-positioning

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

Wpf - 以主桌面为中心

我知道WPF有一个"CenterScreen"值,用于在桌面上居中一个窗口.但是,在双显示器上,这不是很愉快.

我如何以主显示器为中心?我是否需要经历检测主桌面,获取其几何图形等的歌曲和舞蹈,还是有更好的方法?

.net wpf window wpf-positioning

7
推荐指数
1
解决办法
1980
查看次数

在WPF中相对于父级维度定位装饰器

我正在尝试根据装饰元素的父级尺寸来定位装配工.例如,我有一个文本框.我想装饰这个文本框,所以它看起来像这样:

如何安置装饰者http://img707.imageshack.us/img707/9840/fig1.png

文本框放置在画布对象中,如果有足够的可用空间,则将装饰器(半透明的圆角正方形)与文本框的下边缘对齐.当用户点击文本框时,会启动装饰器.

目前,画布及其内容(文本框)以WinForms格式托管 - 因此WPF由ElementHost控件处理.

但是当我运行我的代码时,第一次单击文本框时,它会显示与文本框顶边对齐的装饰器(参见下图).之后它正确定位(如上图所示)有谁知道为什么会这样?

如何装饰是位置http://img14.imageshack.us/img14/4766/fig2v.png

我已粘贴下面的代码:

TextBoxAdorner.cs - 这是装配逻辑

public class TextBoxAdorner : Adorner
{
    private TextBox _adornedElement;
    private VisualCollection _visualChildren;
    private Rectangle _shape;
    private Canvas _container;
    private Canvas _parentCanvas;

    public TextBoxAdorner(UIElement adornedElement, Canvas parentCanvas)
        : base(adornedElement)
    {
        _adornedElement = (TextBox)adornedElement;
        _parentCanvas = parentCanvas;
        _visualChildren = new VisualCollection(this);

        _container = new Canvas();

        _shape = new Rectangle();
        _shape.Width = 100;
        _shape.Height = 80;
        _shape.Fill = Brushes.Blue;
        _shape.Opacity = 0.5;

        _container.Children.Add(_shape);

        _visualChildren.Add(_container);
    }

    protected override Size ArrangeOverride(Size finalSize)
    { …
Run Code Online (Sandbox Code Playgroud)

wpf adorner wpf-positioning

6
推荐指数
1
解决办法
6034
查看次数

动态更改WPF窗口的启动位置

这是一个回答问题的后续问题[这里] [1].

在XAML中定义了WPF窗口的启动位置.现在我想知道如何在代码中更改这些属性?例如,我可以这样说:

窗口加载事件处理程序中的Window1.Top = 40?或者我需要为哪个窗口事件设置动态改变起始位置?

目标是在渲染之前动态设置Windows开始位置.

wpf window wpf-positioning

4
推荐指数
1
解决办法
1万
查看次数

创建WPF弹出窗口

我想创建一个模态弹出窗口.到目前为止,我已经制作了一个窗口,我需要它时创建.但我认为这不是正确的做法.问题是,每当我调用它时,它向右打开约20px,比前一个低20px.它很烦人.这是默认行为还是我在这里做错了什么?

Success win1 = new Success();
win1.ShowDialog();
Run Code Online (Sandbox Code Playgroud)

另外,如果可能的话,我希望它集中在一起?

c# wpf dialog popup wpf-positioning

4
推荐指数
1
解决办法
1467
查看次数

如何在WPF网格列中定位元素?

假设我想在Grid控件的第3列中的坐标x = 20,y = 5处定位元素.我该怎么做呢?我是否需要向该列添加Canvas面板,然后将控件添加到该列中?

wpf grid wpf-positioning

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

如何在父画布中定位 UserControl

我想将此 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)

wpf user-controls wpf-positioning

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

如何在ItemControl中定位ViewModel

我的主窗口ViewModel有一个ViewModel的ObservableCollection,名为ViewModels.

Mainwindow XAML有一个ItemsControl,其ItemsSource绑定到ViewModels.

当我有

<ItemsControl ItemsSource="{Binding ViewModels}" />
Run Code Online (Sandbox Code Playgroud)

与集合中的每个ViewModel关联的视图将一个在另一个下方呈现.视图是UserControls,显示dataGrids.

如何以可自定义的方式定位它们,例如VM1位于左侧,VM2和VM3堆叠在VM1右侧的另一个之上.

每个VieModel都有PosX,PosY,Width和Height属性,我一直在尝试各种模板方法但到目前为止还没有成功.

我已经找到了如何使用Observable图像集合的示例,但我正在努力的一件事是我的集合是ViewModels.

wpf templating itemscontrol wpf-positioning

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