在HubSection

时间:2015-10-20 14:26:30

标签: c# xaml data-binding win-universal-app

此问题与Windows Phone 8.1 Toggling the visibility of a TextBlock in a DataTemplate

类似

和无数其他人,但这些想法都没有奏效。将我的Textblock添加到集线器中的datatemplate后,永远不会触发Loaded事件。 Visual Tree搜索没有找到我的TextBlock。

我尝试过这样的基本绑定:

            <HubSection Background="{StaticResource HubSectionBackgroundBrush}"
                        MaxWidth="{x:Bind DesiredHubSectionWidth, Mode=OneWay}"
                        Header="You have selected:" Padding="60" 
                        >
                <DataTemplate x:DataType="local:Scenario4">
                    <TextBlock TextWrapping="Wrap" Style="{StaticResource BasicTextStyle}" HorizontalAlignment="Left" Text="{Binding Item}"/>
                </DataTemplate> 
            </HubSection>

public string Item { get; set; }
Item = makeText.Text;

但这不起作用(Hub上的文字总是空的)。通过查看以前的帖子和代码,我使用依赖属性:

提出了这个xaml代码
             <HubSection Background="{StaticResource HubSectionBackgroundBrush}"
                        MaxWidth="{x:Bind DesiredHubSectionWidth, Mode=OneWay}"
                        Header="You have selected:" Padding="60"
                        >
                <DataTemplate x:DataType="local:Scenario4">
                    <TextBlock TextWrapping="Wrap" Style="{StaticResource BasicTextStyle}" HorizontalAlignment="Left" Text="{x:Bind DesiredSelectionText, Mode=OneWay}"/>
                </DataTemplate> 
            </HubSection>

在c#

    private static DependencyProperty s_desiredHubSectionWidthProperty
        = DependencyProperty.Register("DesiredHubSectionWidth", typeof(double), typeof(Scenario4), new PropertyMetadata(560.0));

    private static DependencyProperty selectionText = DependencyProperty.Register("SelectionText", typeof(string), typeof(Scenario4), new PropertyMetadata("Nothing"));

    public static DependencyProperty DesiredHubSectionWidthProperty
    {
        get { return s_desiredHubSectionWidthProperty; }
    }

    public static DependencyProperty DesiredSelectionTextProperty
    {
        get { return selectionText; }
    }

    public string DesiredSelectionText
    {
        get { return (string)GetValue(selectionText); }
        set { SetValue(selectionText, value); }
    }

    public double DesiredHubSectionWidth
    {
        get { return (double)GetValue(s_desiredHubSectionWidthProperty); }
        set { SetValue(s_desiredHubSectionWidthProperty, value); }
    }

我用

设置了文本
DesiredSelectionText = makeText.Text;

宽度绑定工作正常,但文本未更新。在运行时更改Hub / DataTemplate文本的正确方法是什么?由于集线器甚至不打印&#34;没有什么&#34;,一定是非常错误的。

作为最后的手段,我想我将构建自己的datatemplate并在运行时分配它,但我可以找到的唯一代码是不推荐的(使用FrameworkElementFactory)。

1 个答案:

答案 0 :(得分:0)

我试图分配到 OnNavigatedTo 方法中的文本块,该方法在文本块的 Loaded 方法之前调用。这就是为什么我的程序将文本块显示为null。

原来我发布的链接是解决方案,对我而言,在导航到页面后加载了文本块。