XAML 错误:在类型“系统.窗口.控件.基元.弹出窗口”上找不到样式属性“模板”

eoxn13cs  于 2022-12-07  发布在  其他
关注(0)|答案(2)|浏览(125)

我必须为弹出窗口创建样式。我使用的是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控件没有这个属性。我该如何解决这个问题?
这里的任何帮助都非常感谢!

omtl5h9j

omtl5h9j1#

由于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>
goqiplq2

goqiplq22#

由于Control类公开了Template属性,因此只能为从Control类继承的控件设置Template。但由于PopUp是直接从FrameworkElement类继承的,因此您不能设置其Template属性。作为一种解决方法,您可以如下设置其Child属性-

<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>

相关问题