错误:在“System.Windows.Controls.Primitives.Popup”类型上找不到样式属性“模板”

时间:2011-12-05 09:31:38

标签: .net wpf xaml .net-4.0 popup

我必须为弹出窗口创建样式。我正在使用WPF和.NET Framework 4。

我写的风格:

<Style x:Key="PopupBox" TargetType="{x:Type Popup}">   
    <Setter Property="OverridesDefaultStyle" Value="True" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Popup}">       
                <Grid>  
                    <Border BorderBrush="Blue" Background="#FFFFFFFF">
                        <Grid>                                
                            <Border Background="AliceBlue"/>  
                            <ContentPresenter ContentSource="Header" /> 
                            <ContentPresenter/>
                            <Border BorderBrush="#FFFFFFFF" Background="#FFBFDBFF"/>
                        </Grid>
                    </Border>
                </Grid>                    
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style> 

我已从此代码中删除了一些元素,如网格行和列定义,因为它们并不重要。

所以我似乎无法使用<Setter Property="Template">,因为Popup控件没有此属性。我该如何解决这个问题?

这里的任何帮助都非常感谢!

2 个答案:

答案 0 :(得分:10)

由于Popup没有任何模板,只有内容的Child属性,您可以使用其他控件(例如ContentControl)来设置样式和模板:

<Style x:Key="PopupContentStyle" TargetType="ContentControl">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ContentControl">
                <Border BorderBrush="Blue" Background="#FFFFFFFF">
                    <Grid>                                
                        <Border Background="AliceBlue"/>  
                        <ContentPresenter/>
                        <Border BorderBrush="#FFFFFFFF" Background="#FFBFDBFF"/>
                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter.Value>
     </Setter>
</Style>

然后将其放在需要它的每个Popup中:

<Popup>
    <ContentControl Style={StaticResource PopupContentStyle}>
       <!-- Some content here -->
    </ContentControl>
</Popup>

答案 1 :(得分:2)

模板只能为继承自Control类的控件设置,因为Control类公开了Template属性。但由于PopUp直接从FrameworkElement类继承,因此您无法设置其Template属性。作为一种解决方法,您可以像这样设置其子属性 -

<Setter Property="Child">
        <Setter.Value>      
                <Grid>  
                    <Border BorderBrush="Blue" Background="#FFFFFFFF">
                        <Grid>                                
                            <Border Background="AliceBlue"/>  
                            <ContentPresenter ContentSource="Header" /> 
                            <ContentPresenter/>
                            <Border BorderBrush="#FFFFFFFF" Background="#FFBFDBFF"/>
                        </Grid>
                    </Border>
                </Grid> 
        </Setter.Value>
</Setter>