我有一个用户控件,我想在其他项目中使用它。当我直接为其属性设置一些值时没有问题:
<local:MyUserControl prop1="val1" prop2="val2">
...
</local:MyUserControl>
但我无法对其应用样式。我试过:
<Window ...>
<Window.Resources>
<Style x:Key="MyUserControlStyle" TargetType="{x:Type local:MyUserControl}">
<Setter Property="prop1" Value="val1"/>
<Setter Property="prop2" Value="val2"/>
</Style>
</Window.Resources>
<Grid>
<local:MyUserControl Style="{StaticResource ResourceKey=MyUserControlStyle}">
...
</local:MyUserControl>
</Grid>
</Window>
我哪里做错了? -谢谢
根据亲爱的@Mario Vernari 的指示,我发现问题是由于我用来创建用户控件的错误策略造成的。我想创建一个能够容纳其他一些用户控件的用户控件。所以我尝试过这个:
<UserControl x:Class="MyNamespace.MyUserControl"
...
Style="{DynamicResource ResourceKey=MyUserControlStyle}">
<UserControl.Resources>
...
<Style x:Key="MyUserControlStyle" TargetType="{x:Type UserControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type UserControl}">
<Border BorderBrush="{Binding Path=DP1}">
...
<ContentPresenter ... Content="{TemplateBinding Content}"/>
...
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
</UserControl>
Where DP1
是类型的依赖属性Brush
。如果您设置其属性(例如DP1
) 直接地。这绝对不是 @Mario 告诉我的正确方式:
...当您使用 UserControl 时,这意味着您already了解其布局,无需进一步设置控件的样式。您正在两次定义其样式同时从而导致碰撞...
他补充道:
相反,您应该使用 CustomControl;定义默认样式Themes文件夹(如果您拥有常规 Visual Studio,它会自动生成)。之后,您可以override您自己的应用程序中的默认样式。与处理普通基类及其派生类的方式相同。
请按照以下步骤操作:http://www.codeproject.com/KB/WPF/WPFCustomControl.aspx http://www.codeproject.com/KB/WPF/WPFCustomControl.aspx ...
显然,在这种情况下,我们需要从ContentControl
类(而不是Control
班级)。你可以看看this http://10rem.net/blog/2010/02/05/creating-customized-usercontrols-deriving-from-contentcontrol-in-wpf-4 & this http://www.abhisheksur.com/2011/07/writing-reusable-custom-control-in-wpf.html去掌握细节。
在此,再次感谢@Mario。 ;)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)