我遇到了问题,我想要做的是我想要到达位于我的UserControl
中的这个矩形:
<Rectangle x:Name="StatusColor" Margin="0,0,0,0" Height="218" VerticalAlignment="Top">
<Rectangle.Fill>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#00000000" Offset="0.901"/>
<GradientStop Color="#CC17FF00" Offset="0"/>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
并且可以在我的Main.xaml.cs
中调用它,例如:
StatusColor.Fill = RedBrush;
现在我收到的错误是:
当前上下文中不存在名称“StatusColor”
我有两个名为Main.xaml
的Xaml文件和名为UserControl
的{{1}}两个文件,其中一个代码隐藏在文件后面(TemplateGrid.xaml
和Main.xaml.cs
)< / p>
所以只是为了简化....我想从TemplateGrid.xaml.cs
到TemplateGrid.xaml
内的X:名称。
提前致谢!
编辑:
这是我在Main.xaml.cs
内声明UserControl
的地方:
Main.xaml
答案 0 :(得分:1)
使用此VisualTreeHelper
查找您的控件:
private DependencyObject FindChildControl<T>(DependencyObject control, string ctrlName)
{
int childNumber = VisualTreeHelper.GetChildrenCount(control);
for (int i = 0; i < childNumber; i++)
{
DependencyObject child = VisualTreeHelper.GetChild(control, i);
FrameworkElement fe = child as FrameworkElement;
// Not a framework element or is null
if (fe == null) return null;
if (child is T && fe.Name == ctrlName)
{
// Found the control so return
return child;
}
else
{
// Not found it - search children
DependencyObject nextLevel = FindChildControl<T>(child, ctrlName);
if (nextLevel != null)
return nextLevel;
}
}
return null;
}
因为UserControl
包含DataTemplate
所以,您一次只能从选中 Rectangle
项中获得GridView
个实例
Rectangle Rec = FindChildControl<Rectangle>(GridView1.SelectedItem, "StatusColor") as Rectangle;
答案 1 :(得分:0)
在TemplateGrid.xaml.cs
中创建一个新属性,如下所示。
public Rectangle StatusColorProperty => StatusColor;
在Main.xaml
中添加Usercontrol时,为添加的用户控件(x:Name ="TemplateGridControl"
)设置属性名称(TemplateGrid
)。
在Main.xaml.cs
中,只要您想访问StatusColor,就可以执行以下操作: -
TemplateGrid control = TemplateGridControl;
control.StatusColorProperty.Fill = Brushes.Red;
默认情况下,Usercontrol中的控件将是&#34; Private&#34; ,因此您需要创建一个公共属性,将控件暴露给外部环境。