我在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不返回任何内容。我想你不能使用这样的资源元素,但我希望你们中的一些人知道这个“问题”的解决方案。提前谢谢!
答案 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);