我想在双击时获得与窗口/根元素相关的元素的绝对位置.元素在它的父元素中的相对位置是我可以看到的,而我想要达到的是相对于窗口的点.我已经看到了如何在屏幕上获取元素点的解决方案,但不是在窗口中.
我想在屏幕的右上角打开一个WPF窗口.
现在我可以通过打开窗口然后移动它来实现(通过user32.dll中的movewindow).但是,这种方法意味着窗口在其默认位置打开,完全加载,然后移动到右上角.
我怎么能改变它以便我可以指定窗口的初始位置和大小?
我试图将一个Popup元素放在相对于Placement控件的特定位置.
为了实现这一点,我需要找出ActualWidth弹出控件.但是在显示弹出窗口之前或之后尝试获取此值(IsOpen = True)它总是返回0.
不幸的是,我不能硬编码弹出窗口的大小.
我怎样才能确定ActualWidth?
我有一个画布和一个红色矩形.
Rectangle有一个MouseDown事件处理程序实现:
private void RedRectangle_MouseDown(object sender, MouseButtonEventArgs e)
{
CreateMyBorder();
}
Run Code Online (Sandbox Code Playgroud)
该CreateMyBorder方法应该创建一个Border与画布上的矩形具有相同大小和位置的UIElement ,即它应该覆盖红色矩形.
复制Width和Height红色矩形的属性和设置它们的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)
不起作用x和y变量值NaN.为什么?
请帮助,我无法相信,UIElement在面板上获得和设置位置这样的微不足道的事情可能会非常恼人.谢谢.
我知道WPF有一个"CenterScreen"值,用于在桌面上居中一个窗口.但是,在双显示器上,这不是很愉快.
我如何以主显示器为中心?我是否需要经历检测主桌面,获取其几何图形等的歌曲和舞蹈,还是有更好的方法?
我正在尝试根据装饰元素的父级尺寸来定位装配工.例如,我有一个文本框.我想装饰这个文本框,所以它看起来像这样:
如何安置装饰者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) 这是一个回答问题的后续问题[这里] [1].
在XAML中定义了WPF窗口的启动位置.现在我想知道如何在代码中更改这些属性?例如,我可以这样说:
窗口加载事件处理程序中的Window1.Top = 40?或者我需要为哪个窗口事件设置动态改变起始位置?
目标是在渲染之前动态设置Windows开始位置.
我想创建一个模态弹出窗口.到目前为止,我已经制作了一个窗口,我需要它时创建.但我认为这不是正确的做法.问题是,每当我调用它时,它向右打开约20px,比前一个低20px.它很烦人.这是默认行为还是我在这里做错了什么?
Success win1 = new Success();
win1.ShowDialog();
Run Code Online (Sandbox Code Playgroud)
另外,如果可能的话,我希望它集中在一起?
假设我想在Grid控件的第3列中的坐标x = 20,y = 5处定位元素.我该怎么做呢?我是否需要向该列添加Canvas面板,然后将控件添加到该列中?
我想将此 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) 我的主窗口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 ×12
wpf-positioning ×12
window ×3
canvas ×2
popup ×2
.net ×1
actualwidth ×1
adorner ×1
c# ×1
dialog ×1
grid ×1
itemscontrol ×1
templating ×1
uielement ×1
wpf-controls ×1