wpf 获取 ControlTemplate 中的控件
如何获取这个里面的Grid?<!--ConnectorDecoratorTemplateDefaultTemplate--><ControlTemplatex:Key="...
如何获取这个里面的Grid?
<!-- ConnectorDecoratorTemplate Default Template -->
<ControlTemplate x:Key="ConnectorDecoratorTemplate" TargetType="{x:Type Control}" >
<Grid Margin="-5" x:Name="PART_Connector" IsHitTestVisible="True" >
<s:Connector x:Name="Left" Orientation="Left" VerticalAlignment="Center" HorizontalAlignment="Left"/>
<!-- <s:Connector x:Name="Top" Orientation="Top" VerticalAlignment="Top" HorizontalAlignment="Center"/>
<s:Connector x:Name="Right" Orientation="Right" VerticalAlignment="Center" HorizontalAlignment="Right"/>
<s:Connector x:Name="Bottom" Orientation="Bottom" VerticalAlignment="Bottom" HorizontalAlignment="Center"/>-->
</Grid>
</ControlTemplate> 展开
<!-- ConnectorDecoratorTemplate Default Template -->
<ControlTemplate x:Key="ConnectorDecoratorTemplate" TargetType="{x:Type Control}" >
<Grid Margin="-5" x:Name="PART_Connector" IsHitTestVisible="True" >
<s:Connector x:Name="Left" Orientation="Left" VerticalAlignment="Center" HorizontalAlignment="Left"/>
<!-- <s:Connector x:Name="Top" Orientation="Top" VerticalAlignment="Top" HorizontalAlignment="Center"/>
<s:Connector x:Name="Right" Orientation="Right" VerticalAlignment="Center" HorizontalAlignment="Right"/>
<s:Connector x:Name="Bottom" Orientation="Bottom" VerticalAlignment="Bottom" HorizontalAlignment="Center"/>-->
</Grid>
</ControlTemplate> 展开
4个回答
展开全部
private DependencyObject FindParentControl<T>(DependencyObject control)
{
DependencyObject parent = VisualTreeHelper.GetParent(control);
while (parent != null && !(parent is T))
{
parent = VisualTreeHelper.GetParent(parent);
}
return parent;
}
public T GetChildObject<T>(DependencyObject obj, string name) where T : FrameworkElement
{
DependencyObject child = null;
T grandChild = null;
for (int i = 0; i <= VisualTreeHelper.GetChildrenCount(obj) - 1; i++)
{
child = VisualTreeHelper.GetChild(obj, i);
if (child is T && (((T)child).Name == name | string.IsNullOrEmpty(name)))
{
return (T)child;
}
else
{
grandChild = GetChildObject<T>(child, name);
if (grandChild != null)
return grandChild;
}
}
return null;
}
this maybe help you
找grid用GetChildObject这个方法,parentControl是这个模板应用的目标控件
Grid grid = GetChildObject<Grid>(parentControl, "PART_Connector
");
注意判断是否返回null
展开全部
看你这个ControlTemplate是在xaml里面定义的,因此如果你需要根据事件等绑定属性,最好也在xaml里面实现,如果要在后台获得,还不如全用后台代码继承自control写控件。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
整理一下你的设计思路
1.假如Grid要与外界有交互,则应把它写成一个控件<UserControl><Grid x:Name="YourGrid"/></UserControl>,然后在后台cs代码中注册依赖属性,链接到YourGrid
2.假如交互都只是在ControlTemplate中进行,则应定义<ControlTemplate>.<Triggers>
否则就打破了ControlTemplate对控件进行封装的本意.
1.假如Grid要与外界有交互,则应把它写成一个控件<UserControl><Grid x:Name="YourGrid"/></UserControl>,然后在后台cs代码中注册依赖属性,链接到YourGrid
2.假如交互都只是在ControlTemplate中进行,则应定义<ControlTemplate>.<Triggers>
否则就打破了ControlTemplate对控件进行封装的本意.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在ControlTemplate中找控件最重要的就是让控件初始化到visualtree上
给你个链接做参考
http://www.cnblogs.com/midcn/archive/2011/05/24/2055276.html
给你个链接做参考
http://www.cnblogs.com/midcn/archive/2011/05/24/2055276.html
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询