簡體   English   中英

使用集線器時如何從CB訪問控件-Windows Phone 8.1

[英]How to get access to controls from CB when using hub - Windows Phone 8.1

我正在Windows Phone 8.1中編寫應用程序,我想從Code-Behind訪問控件。

通常,一切正常,但是當我使用集線器時,我無法訪問Code-Behind中的字段。

<Hub x:Name="RHub">
        <HubSection>
            <DataTemplate>
                <Grid>
                   <TextBox x:Name="Test5"/>
                </Grid>
            </DataTemplate>
        </HubSection>
        <HubSection>
            <DataTemplate>
                <Grid>

                </Grid>
            </DataTemplate>
        </HubSection>
</Hub>

現在,在Code-Behind文件中沒有像Test5這樣的字段,只有RHub。

這是因為控件在DataTemplate內部。 克服此限制的一種簡單方法是掛接到Element Loaded事件。 這是XAML:

<HubSection Header="Trailers">
    <DataTemplate>
        <ListView x:Name="MovieTrailers" Loaded="MovieTrailers_Loaded">

        </ListView>
    </DataTemplate>
</HubSection>

和背后的代碼:

private void MovieTrailers_Loaded(object sender, RoutedEventArgs e)
{
    var listView = (ListView)sender;
    listView.ItemsSource = trailers;
}

如果要搜索列表視圖中的任何元素,可以使用類似以下方法:

public static DependencyObject FindChildControl<T>(DependencyObject control, string ctrlName)
{
    int childNumber = VisualTreeHelper.GetChildrenCount(control);


    for (int i = 0; i < childNumber; i++)
    {
        DependencyObject child = VisualTreeHelper.GetChild(control, i);
        FrameworkElement fe = child as FrameworkElement;
        // Not a framework element or is null
        if (fe == null) return null;

        if (child is T && fe.Name == ctrlName)
        {
            // Found the control so return
            Debug.WriteLine("Achou");
            return child;
        }
        else
        {
            // Not found it - search children
            DependencyObject nextLevel = FindChildControl<T>(child, ctrlName);
            if (nextLevel != null)
                return nextLevel;
        }
    }
    return null;
}

並搜索:

private void findRectangle(ListView listView)
{
    Rectangle ret = this.FindChildControl<Rectangle>(listView, "ret1") as Rectangle;
    if(ret != null)
    {
        ret.Fill = new SolidColorBrush(this.color);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM