WP7 - 如何访问resources->样式中的按钮属性

时间:2011-08-16 16:31:57

标签: windows-phone-7 resourcedictionary

我在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>

我的问题是如何访问MainPage.xaml.cs中的LoadMoreButton.Visibility属性?

如果我尝试使用LoadMoreButton.Visibility,则intelisense不返回任何内容。我想你不能使用这样的资源元素,但我希望你们中的一些人知道这个“问题”的解决方案。提前谢谢!

2 个答案:

答案 0 :(得分:0)

简短版:你不能。

长版:你不能,我不明白你为什么会这样。关于在ListBoxItem内部设置命名按钮的全部想法,意味着它已经多次呈现 ,这是没有意义的。

真正想要做的是将可见性绑定到属性。考虑使用ValueConverter(搜索BoolToVisibilityConverter并且你会发现),这样你就可以简单地绑定来自正在数据绑定的项的布尔属性。

答案 1 :(得分:0)

使用此辅助功能:

        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);