在UWP应用程序中,我有一个带有一些子控件的自定义UserControl(文本框,标签等)。我有一个包含UserControl作为子元素的页面。现在,我想在UserControl下面放置一个按钮,并使用RelativePanel将其与控件的一个子文本框对齐。我无法想出一种访问子元素的方法。
例如,我有一个自定义控件:
<UserControl
x:Class="Sandbox.FooParentControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Sandbox"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="400">
<RelativePanel>
<local:FooControl
x:Name="Foo"
RelativePanel.AlignTopWithPanel="True"
RelativePanel.AlignHorizontalCenterWithPanel="True"/>
<Button
RelativePanel.Below="Foo"
RelativePanel.AlignLeftWith="Foo.TheTextBoxIWantToAlignWith"/> <!-- This doesn't work -->
</RelativePanel>
现在我想与“TheTextBoxIWantToAlignWith”对齐:
#include<ctype.h>
#include<stdio.h>
int main()
{
char str[80],*p;
printf("Enter A String\n");
gets(str);
p=str;
while(*p)
*p++=toupper(*p);
printf("After uppercase conversion: %s\n",str);
p=str;
while(*p)
*p++=tolower(*p);
printf("After lowercase conversion: %s\n",str);
return 0;
}
显然这不起作用(“RelativePanel错误:名称'Foo .TextBoxIWantToAlignWith'在当前上下文中不存在。”)。我试过了:
我真的想避免将UserControl压平到父页面,因为它可以在其他地方重用。有没有办法做到这一点?
答案 0 :(得分:1)
我最终使用隐藏代码解决了这个问题,类似于Lindsay的建议。我迷上了LayoutUpdated事件,该事件计算并设置了边距。像这样:
private void AlignButton()
{
var transform = Foo.TheTextBoxIWantToAlignWith.TransformToVisual(RootPanel);
var textBoxRightEdge = transform .TransformPoint(new Point()).X + Foo.TheTextBoxIWantToAlignWith.ActualWidth;
var rightMargin = RootPanel.ActualWidth - textBoxRightEdge;
if (Math.Abs(TheButtonIWantToAlign.Margin.Right - rightMargin) >= 1)
TheButtonIWantToAlign.Margin = new Thickness(0, 0, rightMargin, 0);
}