首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在WPF UserControl上应用样式的问题

在WPF UserControl上应用样式的问题
EN

Stack Overflow用户
提问于 2011-09-19 20:02:38
回答 2查看 11.9K关注 0票数 5

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

代码语言:javascript
运行
复制
<local:MyUserControl prop1="val1" prop2="val2">
    ...
</local:MyUserControl>

但我不能将样式应用于它。我试过了:

代码语言:javascript
运行
复制
<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>

我哪里错了?-Thanks

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-21 13:39:03

根据亲爱的@Mario Vernari的说明,我发现这个问题是由于我用来创建UserControl的一个糟糕的策略造成的。我想创建一个UserControl,能够容纳一些其他的。所以我试了一下:

代码语言:javascript
运行
复制
<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告诉我的那样,这绝对不是真正的方式:

...When你使用了一个UserControl,这意味着你已经知道了它的布局,不需要进一步设置控件的样式。您同时定义了它的样式两次,因此导致冲突...

他还补充道:

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

遵循这个:http://www.codeproject.com/KB/WPF/WPFCustomControl.aspx ...

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

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

票数 5
EN

Stack Overflow用户

发布于 2011-09-19 20:15:44

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

只是- Style="{StaticResource MyUserControlStyle}"

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7470621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档