WP7 - Как получить доступ к свойствам кнопки в ресурсах-> стиль - PullRequest
1 голос
/ 16 августа 2011

У меня есть этот фрагмент кода в моем MainPage.xaml:

<phone:PhoneApplicationPage.Resources>
        <Style x:Key="ListBoxStyle" TargetType="ListBox">
            <Setter Property="Background" Value="Transparent"/>
            <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}"/>
            <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/>
            <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
            <Setter Property="BorderThickness" Value="0"/>
            <Setter Property="BorderBrush" Value="Transparent"/>
            <Setter Property="Padding" Value="0"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListBox">
                        <ScrollViewer x:Name="ScrollViewer" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Foreground="{TemplateBinding Foreground}" Padding="{TemplateBinding Padding}">
                            <StackPanel>
                                <ItemsPresenter/>
                                <Button x:Name="LoadMoreButton" Content="Load more data..." Background="{StaticResource PhoneAccentBrush}" Click="LoadMoreData_Click" Visibility="Collapsed" />
                            </StackPanel>
                        </ScrollViewer>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </phone:PhoneApplicationPage.Resources>

Мой вопрос заключается в том, как, например, получить доступ к свойству LoadMoreButton.Visibility в MainPage.xaml.cs?

ЕслиЯ пытаюсь использовать LoadMoreButton.Visibility intelisense ничего не возвращает.Я полагаю, что вы не можете использовать такие элементы ресурсов, но я надеюсь, что некоторые из вас знают решение этой «проблемы».Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 16 августа 2011

Используйте эту вспомогательную функцию:

        public static ChildItem FindVisualChild<ChildItem>(DependencyObject obj)
            where ChildItem : DependencyObject {
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) {
                DependencyObject child = VisualTreeHelper.GetChild(obj, i);
                if (child != null && child is ChildItem) {
                    return (ChildItem)child;
                } else {
                    ChildItem childOfChild = FindVisualChild<ChildItem>(child);
                    if (childOfChild != null) {
                        return childOfChild;
                    }
                }
            }
            return null;
        }

Чтобы найти кнопку:

var button = FindVisualChild<Button>(listbox);
0 голосов
/ 16 августа 2011

Короткая версия: Вы не можете.

Длинная версия: Вы не можете, и я не понимаю, почему вы это сделали.Сама идея наличия с именем кнопки, которая находится внутри ListBoxItem, то есть она визуализируется несколько раз , не имеет смысла.

Что вы действительно хочу сделать, это привязать видимость к свойству.Подумайте об использовании ValueConverter (найдите BoolToVisibilityConverter, и вы его найдете), чтобы вы могли просто связать логическое свойство с элементом, для которого привязана база данных.

...