我创建了一个由扩展器,列表框和复选框组成的用户控件。我无法访问复选框(子控件),我想根据表中的行数动态地生成扩展器的数量。任何人都可以提出可能的解决方案访问用户控件的子控件
3
A
回答
0
听起来就像你需要浏览视觉树。最简单的方法是通过Linq-to-VisualTree。要查找所有属于“this”子项的CheckBox,请使用以下查询:
IEnumerable<CheckBox> checks = this.Descendants<CheckBox>().Cast<CheckBox>();
2
这非常含糊。在大多数情况下,您只会公开一些内部控制的属性,例如如果你想创建动态内容,你可以暴露内部ListBox
的ItemsSource
和ItemTemplate
,因为它可以从外部设置,例如,
<UserControl x:Class="Test.UserControls.Bogus" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" Name="control">
<StackPanel>
<TextBlock Text="Lorem Ipsum:" />
<ItemsControl ItemsSource="{Binding ElementName=control, Path=ItemsSource}"
ItemTemplate="{Binding ElementName=control, Path=ItemTemplate}" />
</StackPanel>
</UserControl>
public partial class Bogus : UserControl
{
public static readonly DependencyProperty ItemsSourceProperty = ItemsControl.ItemsSourceProperty.AddOwner(typeof(Bogus));
public IEnumerable ItemsSource
{
get { return (IEnumerable)GetValue(ItemsSourceProperty); }
set { SetValue(ItemsSourceProperty, value); }
}
public static readonly DependencyProperty ItemTemplateProperty = ItemsControl.ItemTemplateProperty.AddOwner(typeof(Bogus));
public DataTemplate ItemTemplate
{
get { return (DataTemplate)GetValue(ItemTemplateProperty); }
set { SetValue(ItemTemplateProperty, value); }
}
public Bogus()
{
InitializeComponent();
}
}
用法:
<uc:Bogus ItemsSource="{Binding Data}">
<uc:Bogus.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" Foreground="Red" />
</DataTemplate>
</uc:Bogus.ItemTemplate>
</uc:Bogus>
你当然也可以封装大量的逻辑,你并不需要暴露。
由于您需要不同数量的扩展器,因此您可能需要一个ItemsControl
(与ListBox
没有选择不同),它已经定义了包含扩展器的ItemTemplate。您可能也可以创建一个部分模板,如我的this answer中所示。
0
您的应用程序正在应用程序实例中运行。如果不是UI更新,请使用Application.usercontrol.ComponentName访问usercontrol组件。如果您进行UI更新,则必须在单独的调度程序线程中运行访问。在这种情况下,使用BackgroundWorker。
例如,我正在我的主应用程序类主窗口和访问它,
MainWindow rootWindow = Application.Current.MainWindow as MainWindow;
现在可以访问组件的用户控件和属性:
rootWindow.usercontrolX.ComponentY.PropertyZ
-1
定义属性在每个控制的孩子的课上。您将能够从父用户控件访问它们,假设您已经在父用户控件中添加了子用户控件。
家长用户控制.. SingalData是儿童用户控逆变
<my:C1TabItem Header="Signal">
<local:SignalData Width="1036" OnSignalNameChange="SignalInputTab_OnSignalNameChange" Loaded="SignalInputTab_Loaded" Height="353" VerticalAlignment="Top" MinHeight="353" HorizontalAlignment="Left"></local:SignalData>
在儿童用户Contorl类,如果你有一个名为tabProductList组件添加属性 -
public C1.WPF.C1TabControl TabProductList
{
get { return this.tabProductList; }
}
最后,从您的父母课程可以参考它 -
C1TabItem tbItem = (C1TabItem)c1TabControl1.SelectedItem;
SignalData sigInp = (SignalData)tbItem.Content;
if (sigInp.TabProductList.SelectedIndex == 0)
{
....
相关问题
- 1. 从子用户控件访问基本用户控件属性
- 2. 用户控件上的访问控制
- 3. 从托管的Web页面访问用户控件的子控件
- 4. ASP.NET:用户控件可以访问它包装的控件
- 5. VB.Net ASP:用户控件中的访问控件
- 6. 从网页用户控件访问页面内的html控件
- 7. WPF关闭用户控件在框架和访问父控件
- 8. 从另一个控件访问用户控件
- 9. 在运行时添加用户控件 - 访问控件
- 10. 在Web用户控件上访问主页面控件
- 11. jQuery和用户控件属性访问
- 12. Asp.Net用户控件 - 访问在
- 13. 从外部访问用户控件
- 14. 从用户控件访问父页ViewState?
- 15. 在WPF中访问用户控件
- 16. 从用户控件访问父窗口
- 17. 访问一个ASP.Net用户控件
- 18. 如何访问WPF/MVVM中的子用户控件的DependencyProperty?
- 19. Android访问父控件的每个子控件
- 20. 访问WPF用户控件的子元素属性
- 21. ASP.NET - 访问子页面中的控件
- 22. 访问子控件的视图状态
- 23. 重构访问ASP.NET中的子控件?
- 24. 从Java访问GridView的子控件
- 25. 在ListView控件中访问TextBox控件
- 26. ASP.NET访问控件
- 27. 通过ID访问自定义控件子控件
- 28. 从子窗体访问几个用户控件?
- 29. MVVM +用户控件+用户控件+ DependencyProperty
- 30. 用户控件与用户控件
这真的帮了我很大的忙,所以要了解我们正在创建一个父项的依赖属性,孩子可以访问? – 2014-07-29 10:57:44
@MichaelHarper:这不是真正的亲子关系,更多的是关于内外。一个创建依赖属性并在内部绑定它们,以便可以从外部转发数据。 “UserControl”定义的XAML中的所有内容都是从外部隐藏起来的,除非绑定到UserControl的公共属性上。 – 2014-07-29 14:12:57
这是有道理的,所以我们通过在外部/包装用户控件上创建一个属性来访问内部用户控件(列表/网格等) – 2014-07-30 16:20:48