Как изменить видимость кнопки шаблона в списке? - PullRequest
0 голосов
/ 11 мая 2011

Я создаю приложение для Windows Phone, и у меня возникла проблема с шаблоном списка.Я хотел бы скрыть «MoreButton», определенный в MoreListBoxStyle во время выполнения.Я попытался создать свойство и привязать его к свойству видимости кнопки, но оно не работает.

Как мне это сделать?

<phone:PhoneApplicationPage.Resources>
    <Style x:Key="MoreListBoxStyle" 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="MoreButton"   Content="{Binding Path=LocaleResources.More, Source={StaticResource LocalizedStrings}}" Height="67" Margin="0,0,8,0" BorderBrush="{x:Null}" Foreground="{StaticResource PhoneForegroundBrush}" BorderThickness="0" FontSize="17" FontWeight="Bold" Click="MoreButton_Click"  />
                        </StackPanel>
                    </ScrollViewer>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</phone:PhoneApplicationPage.Resources>

И мой список:

<ListBox x:Name="RandomListBox" ItemsSource="{Binding}" Grid.Row="1" Style="{StaticResource MoreListBoxStyle}">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Vertical">
                                <TextBlock Text="{Binding MyText}" TextWrapping="Wrap" Width="440" Margin="0,10"   Name="{Binding MyId}" ManipulationCompleted="TextBlock_ManipulationCompleted" />
                                <TextBlock Text="{Binding Name}" Width="440" TextWrapping="Wrap" TextAlignment="Right" Margin="0,0,0,15" />
                                <Rectangle Width="440" Height="3" Fill="{StaticResource PhoneForegroundBrush}"></Rectangle>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>

                </ListBox> 

1 Ответ

1 голос
/ 11 мая 2011

Насколько я понимаю ваш вопрос, я думаю, что у вас есть два варианта:

Если вы используете свойство CLR, убедитесь, что вы реализовали INotifyPropertyChanged , например, например:

public partial class MainPage : PhoneApplicationPage, INotifyPropertyChanged
{
       ...
    Visibility sampleProperty;
    public Visibility SampleProperty
    {
        get
        {
            return sampleProperty;
        }
        set
        {
            sampleProperty = value;
            // Call OnPropertyChanged whenever the property is updated
            OnPropertyChanged("SampleProperty");
        }

    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string name)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(name));
        }
  }
}
...