Mim*_*imi 5 c# wpf user-controls coding-style
我有一个用户控件,我想在其他项目中使用它.当我直接为其属性设置一些值时没有问题:
<local:MyUserControl prop1="val1" prop2="val2">
...
</local:MyUserControl>
Run Code Online (Sandbox Code Playgroud)
但我无法应用它的风格.我试过了:
<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>
Run Code Online (Sandbox Code Playgroud)
我哪里错了?-谢谢
使用亲爱的@Mario Vernari的说明,我发现问题是由于我用来创建UserControl的糟糕策略造成的.我想创建一个能够容纳其他一些的UserControl.所以我试过这个:
<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>
Run Code Online (Sandbox Code Playgroud)
DP1
类型的依赖属性在哪里Brush
.通过这种方式创建的UserControl可以DP1
直接设置其属性(如).当@Mario告诉我时,这绝对不是真正的方式:
...当您使用UserControl时,这意味着您已经知道它的布局,并且不需要进一步设置控件的样式.您两次定义它的风格,同时由此产生的冲突...
他补充说:
相反,你应该使用CustomControl; 在Themes文件夹中定义默认样式(如果您拥有常规Visual Studio,则会自动生成).之后,您可以覆盖自己应用中的默认样式.以与普通基类及其派生类似的方式.
请关注:http: //www.codeproject.com/KB/WPF/WPFCustomControl.aspx ...
显然,在这种情况下,我们需要从ContentControl
类(而不是Control
类)派生我们的无形控件.你可以看看这个和这个来掌握细节.
在这里,我再次感谢@Mario.;)