【发布时间】:2016-01-27 21:24:16
【问题描述】:
我想在我的应用程序中添加一个带有图标或文本的页眉,该图标或文本位于页面顶部的 50 像素高条中。 (可选)带有后退按钮。
出于这个原因,我在每个页面上都使用了一个 UserControl,它会应用以下任一样式:PageHeaderStyle 或 PageHeaderBackStyle。
我对其中之一的实现如下(我的 App.xaml 中的样式定义):
<Style x:Key="PageHeaderBaseStyle" TargetType="UserControl">
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="VerticalAlignment" Value="Top" />
<Setter Property="Height" Value="50" />
<Setter Property="Width" Value="NaN" />
<Setter Property="Background" Value="{StaticResource CDColor}" />
</Style>
<Style x:Key="PageHeaderStyle" TargetType="UserControl" BasedOn="{StaticResource PageHeaderBaseStyle}">
<Setter Property="Content">
<Setter.Value>
<Grid Background="{StaticResource CDColor}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" DataContext="{StaticResource MainPageModel}">
<TextBlock Style="{StaticResource PageHeaderTextBlockStyle}" Text="{Binding Title}" Visibility="{Binding TitleVisibility}" />
<Image Style="{StaticResource PageHeaderIconStyle}" Source="{Binding Icon}" Visibility="{Binding IconVisibility}" />
</Grid>
</Setter.Value>
</Setter>
</Style>
按应有的方式应用:
<UserControl Style="{StaticResource PageHeaderStyle}" />
现在我首先使用了“模板”并将 DataTemplate 与网格组件一起应用。但这没有用。然后我改成直接设置UserControl的Content。这确实有效:在构建设计器后显示页眉(之前它只显示蓝色选择边框,但没有内容 - 它是透明的)。
但是,一旦我开始在模拟器上调试应用程序,它就会消失,并且正在运行的应用程序只显示应该在的空白点。
为什么会这样?我的意思是毕竟设计师已经展示了它,为什么它会消失呢?
仅供参考:我没有得到任何绑定异常或任何其他异常。它只是没有显示出来。
PS:我尝试将背景设置为基本样式,同时将网格的背景设置为透明。这也不起作用 - 只是一个空白点。
【问题讨论】:
-
您应该使用
ContentPresenter或ContentControl而不是像您一样使用UserControl。 UserControls 应该用作扩展控件,并带有自己的代码和 xaml 文件。 -
两者都不能工作...我对此有点生气。怎么会这样?我不认为我错过了一些重要的东西,就逻辑而言,它应该工作得很好......但仍然只有设计师展示了任何东西
-
尝试在基本样式中指定具体的
Width值而不是NaN。如果这不起作用,我将尝试在我的手机上重现该问题。 -
我删除了它(不再有任何用处)。当我启动模拟器时它仍然没有出现...... sigh.