【问题标题】:UserControl style only visible in designerUserControl 样式仅在设计器中可见
【发布时间】:2016-01-27 21:24:16
【问题描述】:

我想在我的应用程序中添加一个带有图标或文本的页眉,该图标或文本位于页面顶部的 50 像素高条中。 (可选)带有后退按钮。

出于这个原因,我在每个页面上都使用了一个 UserControl,它会应用以下任一样式:PageHeaderStylePageHeaderBackStyle

我对其中之一的实现如下(我的 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:我尝试将背景设置为基本样式,同时将网格的背景设置为透明。这也不起作用 - 只是一个空白点。

【问题讨论】:

  • 您应该使用ContentPresenterContentControl 而不是像您一样使用UserControl。 UserControls 应该用作扩展控件,并带有自己的代码和 xaml 文件。
  • 两者都不能工作...我对此有点生气。怎么会这样?我不认为我错过了一些重要的东西,就逻辑而言,它应该工作得很好......但仍然只有设计师展示了任何东西
  • 尝试在基本样式中指定具体的Width 值而不是NaN。如果这不起作用,我将尝试在我的手机上重现该问题。
  • 我删除了它(不再有任何用处)。当我启动模拟器时它仍然没有出现...... sigh.

标签: xaml windows-phone-8.1


【解决方案1】:

解决了问题:最好的方法可能是使用 ContentControl。但是,使用 Content 属性不起作用。您必须使用 ContentTemplate 属性。使用那个确实很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    相关资源
    最近更新 更多