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