在Silverlight中如何在XAML中设置UserControl子级的样式?
我有一个在Silverlight中如何在XAML中设置UserControl子级的样式?,silverlight,xaml,silverlight-5.0,Silverlight,Xaml,Silverlight 5.0,我有一个usercontrolmyparentcontrol,其中有另一个控件(TreeView)。我将此控件作为dep属性公开,例如TreeView MyChildControl 然后在使用MyParentConrol的XAML中,我想访问所有的TreeView属性,例如Style 我想写一些像: <my:MyParentControl> <my:MyParentControl.MyChildControl.Style> <Style /&
usercontrolmyparentcontrol
,其中有另一个控件(TreeView)。我将此控件作为dep属性公开,例如TreeView MyChildControl
然后在使用MyParentConrol的XAML中,我想访问所有的TreeView属性,例如Style
我想写一些像:
<my:MyParentControl>
<my:MyParentControl.MyChildControl.Style>
<Style />
</my:MyParentControl.MyChildControl.Style>
</my:MyParentControl>
有什么方法可以实现这一点吗?您可以通过这样编写XAML来实现这一效果:
<my:MyParentControl>
<my:MyParentControl.Resources>
<Style TargetType="my:MyChildControl">
<Setter Property="Background" Value="Red"/>
</Style>
</my:MyParentControl.Resources>
<my:MyParentControl>
在本例中,此XAML创建了一个MyParentControl,其中MyChildControl类型的所有子项都有红色背景。您可以通过如下方式编写XAML来获得此效果:
<my:MyParentControl>
<my:MyParentControl.Resources>
<Style TargetType="my:MyChildControl">
<Setter Property="Background" Value="Red"/>
</Style>
</my:MyParentControl.Resources>
<my:MyParentControl>
在本例中,此XAML创建了一个MyParentControl,其中MyChildControl类型的所有子项都有红色背景。通过公开内部控件的DependencyProperty,您已经解决了一半问题-即您可以在XAML中设置单个属性 下一步是让这些属性设置器影响子控件 实现这一目标有两种选择
public class ParentControl : Control
{
public Style ChildControlStyle
{
get { return (Style)GetValue(ChildControlStyleProperty); }
set { SetValue(ChildControlStyleProperty, value); }
}
public static readonly DependencyProperty ChildControlStyleProperty =
DependencyProperty.Register("ChildControlStyle",
typeof(Style),
typeof(ParentControl),
new PropertyMetadata(null));
}
通过公开内部控件的DependencyProperty,您已经解决了一半的问题-即您可以在xaml中设置单个属性 下一步是让这些属性设置器影响子控件 实现这一目标有两种选择
public class ParentControl : Control
{
public Style ChildControlStyle
{
get { return (Style)GetValue(ChildControlStyleProperty); }
set { SetValue(ChildControlStyleProperty, value); }
}
public static readonly DependencyProperty ChildControlStyleProperty =
DependencyProperty.Register("ChildControlStyle",
typeof(Style),
typeof(ParentControl),
new PropertyMetadata(null));
}
我相信这是一个非常好的答案。谢谢你。不幸的是,可能只有一个马克,而那个家伙想出了一个解决方案,这对我来说更具吸引力。但我还是你的好!我相信这是一个很好的答案。谢谢你。不幸的是,可能只有一个马克,而那个家伙想出了一个解决方案,这对我来说更具吸引力。但我还是你的好!