繁体   English   中英

在WPF UserControl上应用样式的问题

[英]Issue with applying style on WPF UserControl

我有一个用户控件,我想在其他项目中使用它。 当我直接为其属性设置一些值时,没有问题:

<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的错误策略所致。 我想创建一个可以容纳其他一些内容的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>

其中DP1Brush类型的依赖项属性。 如果直接设置其属性(例如DP1 ),则通过这种方式创建的UserControl可以工作。 绝对不是@Mario告诉我的真实方法:

...当您使用UserControl时,这意味着您已经知道它的布局,并且不需要进一步设置控件的样式。 您要同时定义其样式两次从而导致碰撞...

他补充说:

相反,您应该使用CustomControl; 在“ 主题”文件夹中定义默认样式(如果您拥有常规的Visual Studio,它将自动生成)。 之后,您可以在自己的应用中覆盖默认样式。 以同样的方式,您可以对普通的基类及其派生类进行处理。

请按照下列步骤操作: http : //www.codeproject.com/KB/WPF/WPFCustomControl.aspx ...

显然,在这种情况下,我们需要从ContentControl类(而不是Control类)派生无外观的控件。 您可以看看这个这个,以掌握细节。

在这里,我再次感谢@Mario。 ;)

您正在给Style="{StaticResource ResourceKey=MyUserControlStyle}"

只是Style="{StaticResource MyUserControlStyle}"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM